Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不带jQuery的stopPropagation_Javascript_Jquery_Stoppropagation - Fatal编程技术网

Javascript 不带jQuery的stopPropagation

Javascript 不带jQuery的stopPropagation,javascript,jquery,stoppropagation,Javascript,Jquery,Stoppropagation,我绑定到一个链接(通过使用jQuery的.live()函数)单击事件,然后手动添加一个带有纯JS和HTML的onclick事件处理程序(如)。我想防止事件冒泡到live方法,但我不知道如何防止 在这种情况下,e.stopPropagation()可能会有所帮助,但是添加了onclick的事件处理程序是用纯JS编写的,我不能从jQuery元素包装器外部调用stopPropagation()返回false在这种情况下不起作用。我试图用$.Event('click').stopPropagation(

我绑定到一个链接(通过使用jQuery的
.live()
函数)
单击
事件,然后手动添加一个带有纯JS和HTML的
onclick
事件处理程序(如
)。我想防止事件冒泡到
live
方法,但我不知道如何防止

在这种情况下,
e.stopPropagation()
可能会有所帮助,但是添加了
onclick
的事件处理程序是用纯JS编写的,我不能从jQuery元素包装器外部调用
stopPropagation()
<代码>返回false在这种情况下不起作用。我试图用
$.Event('click').stopPropagation()替换
return false
,但我认为这是错误的,因为它不起作用

如何在没有jQuery包装器的情况下防止bubling到
live()
方法?

使用,无法停止传播。这是因为使用
.live
,事件处理程序绑定到DOM树的根。因此,在调用处理程序之前,事件必须冒泡到最高的元素。这是使用
.live
的一个注意事项

考虑使用(如果希望处理程序持久化)或使用

如果希望完全禁用活动处理程序,请使用骰子:

$("#myHref").die("click", aClick); // this will remove any existing event handlers
$("#myHref").click(yourhandler);   // add your handler

或者,添加一个内联处理程序(并从此处取消事件):


内联处理程序总是在任何jquery事件处理程序之前首先被调用。

我假设“正常”事件处理程序中的
返回false
也可以防止事件冒泡(谢谢)

但是,还有其他方法可以阻止它,如中所述:


cancelBubble
适用于IE,
stopPropagation
适用于所有W3C兼容的浏览器。

返回false
应该可以做到这一点。如果您这样做,它应该可以工作:
。顺便说一句,
event.stopPropagation()
不是jQuery方法。问题是IE使用了一个不同的事件模型,它不提供这种方法,因此
return
ing
false
是这种情况下的最佳解决方案。问题是,为什么要使用内联事件处理程序?return false而不是cancel绑定的事件。在jQuery函数内的livereturn false与函数外的livereturn false不同:@Mrchief:我明白了,谢谢。。。。我一直认为是…我无法更改绑定在.live上的代码。没有办法修复此问题?但是可以从绑定到元素的另一个事件处理程序停止事件。只有先注册该事件处理程序。jQuery会将它们排队,对吗?@Mrchief:正如您自己所说,
live
将事件处理程序绑定到根目录。每个直接绑定到元素的事件处理程序都可以阻止事件冒泡到根。@Abonec:请参阅我的更新答案和fiddle。希望您可以使用其中一个。当我尝试获取有关事件的任何信息时(单击“alert(window.event)”),当我单击时,它会显示“undefined”警报。@Abonec:
window.event
仅在IE(和Chrome)中可用。在其他浏览器中,事件对象作为参数传递给事件处理程序。但我不使用函数,也不能给出参数r(e)。@Abonec:如果您有一个内联事件处理程序,那么事件对象可以通过变量
event
或通过
window.event
获得。例如,
onclick=“event=event | | window.event;event.cancelBubble=true;//等…”
。或者您定义了一个函数并调用
onclick=“something(event | | window.event)”
@Abonec:一般来说,我建议您阅读和了解有关事件处理的内容,请查看。如果你同时阅读这两本书,你就有了很好的基础。
<a href=".." onclick="yourhandler">
function doSomething(e)
{
    if (!e) var e = window.event;
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
}