没有jQuery的stopPropagation
我绑定到一个链接(通过使用jQuery的.live()
函数) click
事件然后手动添加一个onclick
事件处理程序与纯JS和HTML(如 )。 我想防止事件冒泡到
live
方法,但我不知道如何。
也许e.stopPropagation()
在这种情况下是有用的,但是用onclick
添加的事件处理程序是用纯JS编写的,我不能从jQuery元素包装器外部调用stopPropagation()
。 在这种情况下return false
不起作用。 我试图用$.Event('click').stopPropagation()
替换return false
$.Event('click').stopPropagation()
但我认为这是错误的,因为它不起作用。
如何在没有jQuery包装器的情况下防止bubling到live()
方法?
使用.live ,您无法阻止传播。 这是因为使用.live
,事件处理程序绑定到DOM树的根。 因此,在调用处理程序之前,事件必须冒泡到最高元素。 它是关于使用.live
一个警告。
考虑使用.delegate (如果您希望处理程序保持不变 )或使用.bind 。
如果要完全禁用实时处理程序,请使用die:
$("#myHref").die("click", aClick); // this will remove any existing event handlers $("#myHref").click(yourhandler); // add your handler
演示1:JsFiddle 1
或者,添加内联处理程序(并从那里取消事件):
演示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的浏览器。