Javascript 不带jQuery的stopPropagation
我绑定到一个链接(通过使用jQuery的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(
.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
ingfalse
是这种情况下的最佳解决方案。问题是,为什么要使用内联事件处理程序?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();
}