stopPropagation是否也阻止同一元素上的其他处理程序运行?

时间:2012-08-18 19:24:37

标签: javascript javascript-events contextmenu jquery

我知道stopPropagation()阻止事件到达包装当前元素的DOM元素。它是否也阻止将此事件传递给同一元素上的其他处理程序?

举个例子,我在元素上定义了自己的点击处理程序。另外我还使用这个jQuery Context Menu插件来处理mousedown+(testbutton == 2)+mouseup并在鼠标(up | down)之后使用stopPropagation()这似乎禁用了我的点击处理程序。如果我在插件源中注释这两个调用,我的点击处理程序和上下文菜单正常工作。这似乎表明stopPropagation()stopImmediatePropgation()做同样的事情。我的理解是否正确?

1 个答案:

答案 0 :(得分:3)

stopPropagation不会阻止同一事件的其他处理程序,但在这种特定情况下它会停止。如果您在mousedown事件中使用它,则会阻止click事件。

演示:http://jsfiddle.net/v6ges/

$('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事件绑定,则会触发两个click事件。