我绑定到一个链接(通过使用 .live()
jQuery的功能) click
事件然后手动添加 onclick
具有纯JS和HTML的事件处理程序(如 <a href="".... onclick="some action">
)。我想防止事件冒泡到 live
方法,但我不知道如何。
也许 e.stopPropagation()
在这种情况下是有用的,但事件处理程序添加了 onclick
是用纯JS编写的,我不能打电话 stopPropagation()
来自jQuery元素包装器外部。 return false
在这种情况下不起作用。我试着替换 return false
同 $.Event('click').stopPropagation()
但我认为这是错误的,因为它不起作用。
如何防止起泡 live()
没有jQuery包装器的方法?
同 。生活,你无法阻止传播。这是因为 .live
,事件处理程序绑定到DOM树的根。因此,在调用处理程序之前,事件必须冒泡到最高元素。它是使用中的一个警告 .live
。
考虑使用 。代表 (如果您希望处理程序保持不变)或使用 .bind 代替。
如果要完全禁用实时处理程序,请使用die:
$("#myHref").die("click", aClick); // this will remove any existing event handlers
$("#myHref").click(yourhandler); // add your handler
演示1:JsFiddle 1
或者,添加内联处理程序(并从那里取消事件):
<a href=".." onclick="yourhandler">
演示2:JsFiddle 2
内联处理程序将始终在任何jquery事件处理程序之前被调用。
我是在假设的 return false
在“正常”事件处理程序中也可以防止事件冒泡, 但是我错了 (谢谢 @Mrchief)。
还有其他方法可以阻止它,如上所述 quirksmode.org:
function doSomething(e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}
cancelBubble
适用于IE, stopPropagation
适用于所有兼容W3C的浏览器。