我知道 stopPropagation()
会阻止事件到达包装当前元素的 DOM 元素。它还会阻止此事件传递给同一元素上的其他处理程序吗?
举个例子,我在元素上定义了自己的点击处理程序。另外我也在用这个jQuery Context Menu插件处理 mousedown+(testbutton == 2)+mouseup
并在 mouse(up|down) 之后使用 stopPropagation()
,这似乎禁用了我的点击处理程序。如果我在插件源中注释这两个调用,我的单击处理程序和上下文菜单将正常工作。这似乎表明 stopPropagation() 和 stopImmediatePropgation() 做同样的事情。我的理解正确吗?
最佳答案
stopPropagation
不会停止同一事件的其他处理程序,但在本例中它会停止。如果您在 mousedown
事件中使用它,它将阻止 click
事件。
$('div').mousedown(function(e){ alert(0); e.stopPropagation(); });
$('div').click(function(e){ alert(1); e.stopPropagation(); });
$('div').click(function(e){ alert(2); e.stopPropagation(); });
仅触发 mousedown
事件。如果您注释掉 mousedown
事件绑定(bind),则两个 click
事件都会被触发。
关于javascript - stopPropagation 是否还会阻止同一元素上的其他处理程序运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12021602/