为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用内联onclick属性停止事件传播?

如何使用内联onclick属性停止事件传播?

慕莱坞森 2019-06-13 14:38:45
如何使用内联onclick属性停止事件传播?考虑以下几点:<div onclick="alert('you clicked the header')" class="header">   <span onclick="alert('you clicked inside the header');">something inside the header</span> </div>如何使其在用户单击span时不会触发div点击事件?
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

使用事件停止传播().

<span onclick="event.stopPropagation(); alert('you clicked inside the header');">something inside the header</span>

为IE:window.event.cancelBubble = true

<span onclick="window.event.cancelBubble = true; alert('you clicked inside the header');">something inside the header</span>


查看完整回答
反对 回复 2019-06-13
?
萧十郎

TA贡献1815条经验 获得超13个赞

从函数内部获取事件对象有两种方法:

  1. 第一个参数,在符合W3C标准的浏览器(Chrome、Firefox、Safari、IE9+)中。
  2. InternetExplorer中的window.Event对象(<=8)

如果您需要支持不遵循W3C建议的遗留浏览器,通常在函数中使用以下内容:

function(e) {
  var event = e || window.event;
  [...];
}

这将首先检查其中一个,然后检查另一个,然后存储事件变量中找到的任何一个。但是,在内联事件处理程序中没有e对象来使用。在这种情况下,您必须利用arguments集合,它总是可用的,并引用传递给函数的完整参数集:

onclick="var event = arguments[0] || window.event; [...]"

但是,一般来说,如果需要停止传播之类的复杂操作,就应该避免内联事件处理程序。从中期和长期来看,分别编写事件处理程序并将它们附加到元素是一个更好的主意,无论是可读性还是可维护性。


查看完整回答
反对 回复 2019-06-13
?
BIG阳

TA贡献1859条经验 获得超6个赞

请记住,Firefox不支持window.Event,因此它必须遵循以下内容:

e.cancelBubble = true

或者,您可以为Firefox使用W3C标准:

e.stopPropagation();

如果你想变得漂亮,你可以这样做:

function myEventHandler(e)
{
    if (!e)
      e = window.event;

    //IE9 & Other Browsers
    if (e.stopPropagation) {
      e.stopPropagation();
    }
    //IE8 and Lower
    else {
      e.cancelBubble = true;
    }
}


查看完整回答
反对 回复 2019-06-13
  • 3 回答
  • 0 关注
  • 979 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号