当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用内联onclick属性停止事件传播?》经验,为你挑选了8个好方法。

考虑以下:

something inside the header

如何才能使用户点击跨度时,它不会触发div点击事件?



1> James..:

使用event.stopPropagation().

something inside the header

对于IE: window.event.cancelBubble = true

something inside the header


这是错误的 - 内联onclick处理程序不会将事件作为参数传递.正确的解决方案是Gareths,下面.
在FireFox中没有事件对象这样的东西.
事件对象是回调的参数.实际上,IE中没有事件对象,因为这个对象可以通过window.event访问,而不是函数的参数:-)
在Firefox中,您可以访问内联脚本中的变量事件,但window.event不可用.


2> Gareth..:

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

    第一个参数,符合W3C标准的浏览器(Chrome,Firefox,Safari,IE9 +)

    Internet Explorer中的window.event对象(<= 8)

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

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

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

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

但是,一般来说,如果你需要处理像停止传播这样复杂的事情,你应该避免使用内联事件处理程序.分别编写事件处理程序并将它们附加到元素是中长期更好的想法,无论是为了可读性还是可维护性.


从内联侦听器,您可以传递事件对象,如:`onclick ="foo(event)"`,然后在函数`function foo(event){/*do stuff with event*/}`.这适用于IE和W3C事件模型.
这实际上并没有回答这个问题.
"小于或等于八"有点......含糊不清.

3> Robert C. Ba..:

请记住,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;
    }
}


为了使它工作,人们需要这样称呼:`
`

4> SoftwareARM..:

使用此功能,它将测试是否存在正确的方法.

function disabledEventPropagation(event)
{
   if (event.stopPropagation){
       event.stopPropagation();
   }
   else if(window.event){
      window.event.cancelBubble=true;
   }
}



5> 小智..:

我有同样的问题 - IE中的js错误框 - 就我所见,这在所有浏览器中都能正常工作(event.cancelBubble = true可以在IE中完成工作)

onClick="if(event.stopPropagation){event.stopPropagation();}event.cancelBubble=true;"


在这种情况下,内联JS是完全不可读的:(

6> Matías Contr..:

这对我有用



Something inside the other div



7> Evgeny Gorb..:

对于ASP.NET网页(不是MVC),您可以使用Sys.UI.DomEventobject作为本机事件的包装器.

或者,将事件作为参数传递给内部函数:

在某些功能:

function someFunction(event){
    event.stopPropagation(); // here Sys.UI.DomEvent.stopPropagation() method is used
    // other onclick logic
}



8> ajh1138..:

根据这个页面,在IE中你需要:

event.cancelBubble = true

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有