我绑定到一个链接(使用jQuery的.live()
函数)click
事件,然后手动添加一个带有纯JS和HTML的onclick
事件处理程序(如{{1} })。我想防止事件冒泡到<a href="".... onclick="some action">
方法,但我不知道如何。
也许live
在这种情况下很有用,但添加了e.stopPropagation()
的事件处理程序是用纯JS编写的,我无法从jQuery元素包装器外部调用onclick
。 stopPropagation()
在这种情况下不起作用。我尝试用return false
替换return false
,但我认为这是错误的,因为它不起作用。
如何在没有jQuery包装器的情况下防止冒充$.Event('click').stopPropagation()
方法?
答案 0 :(得分:14)
我假设“普通”事件处理程序中的return false
也阻止事件冒泡,but I was wrong(感谢@Mrchief)。
还有其他方法可以阻止它,如quirksmode.org所述:
function doSomething(e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}
cancelBubble
适用于IE,stopPropagation
适用于所有兼容W3C的浏览器。
答案 1 :(得分:2)
使用.live,您无法阻止传播。这是因为使用.live
,事件处理程序绑定到DOM树的根。因此,在调用处理程序之前,事件必须冒泡到最高元素。它是关于使用.live
的注意事项之一。
考虑使用.delegate(如果您希望处理程序保留)或使用.bind代替。
如果要完全禁用实时处理程序,请使用die:
$("#myHref").die("click", aClick); // this will remove any existing event handlers
$("#myHref").click(yourhandler); // add your handler
或者,添加内联处理程序(并从那里取消事件):
<a href=".." onclick="yourhandler">
在任何jquery事件处理程序之前,将首先调用内联处理程序。