abo*_*nec 12 javascript jquery stoppropagation
我绑定到一个链接(通过使用.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包装器的情况下防止冒泡到方法?
Fel*_*ing 14
我假设return false在"正常"事件处理程序中也阻止事件冒泡,但我错了(感谢@Mrchief).
还有其他方法可以阻止它,如quirksmode.org所述:
function doSomething(e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}
Run Code Online (Sandbox Code Playgroud)
cancelBubble适用于IE,stopPropagation适用于所有兼容W3C的浏览器.
使用.live,您无法停止传播。这是因为.live,事件处理程序绑定到 DOM 树的根。因此,在调用处理程序之前,事件必须冒泡到最高元素。这是使用时的注意事项之一.live。
考虑使用.delegate(如果您希望处理程序持续存在)或使用.bind代替。
如果您希望完全禁用实时处理程序,请使用 die:
$("#myHref").die("click", aClick); // this will remove any existing event handlers
$("#myHref").click(yourhandler); // add your handler
Run Code Online (Sandbox Code Playgroud)
或者,添加一个内联处理程序(并从那里取消事件):
<a href=".." onclick="yourhandler">
Run Code Online (Sandbox Code Playgroud)
内联处理程序将始终在任何 jquery 事件处理程序之前首先被调用。