绕过event.stopPropagation

时间:2009-11-24 09:20:15

标签: javascript javascript-events event-handling

我正在编写一个Javascript附加组件(不是在jQuery中),它在触发某个事件时开始工作。它在大多数站点上都能正常工作,但我在使用stopPropagation()的站点中遇到了问题。 有可能绕过这个并附加事件吗? 谢谢!

2 个答案:

答案 0 :(得分:2)

对于符合标准的浏览器,请使用capturing phase。对于IE,您可以通过在元素(可能是body)上调用setCapture来捕获鼠标事件。完成操作后,请致电event对象的srcElement上的fireEvent

答案 1 :(得分:0)

stopPropagation()如何妨碍你? (添加更多描述如何/您的附加组件的工作/附加)。

stopPropagation()唯一能做的就是阻止事件冒泡到接收事件的元素的父元素。因此,不调用父项上的事件处理程序。但直接在元素上的同一事件的多个处理程序都被调用。

所以...只要你将事件处理程序直接绑定到首先生成事件的元素,你就可以了。如果你只是试图听取例如在body依靠所有冒泡的事件,你运气不好。

e.g。如果您现在点击红色div,则会收到一条提示sibling handler和一个inline handler的提醒,但前面定义的内联 - onclick处理程序会调用stopPropagation()

(注意:此示例不处理使用attachEvent()cancelBubble的IE细节

<style type="text/css" media="screen">
    #parent1 { background-color: green; width:300px; height:300px }
    #test { background-color: red; width:200px; height:200px }
</style>

<div id="parent1">
    <div id="test" onclick="javascript:event.stopPropagation();alert('inline handler');"></div>
</div>

<script type="text/javascript">
    parent1.addEventListener('click',
        function(e) { alert('parent'); },
        false
    );
    test.addEventListener('click',
        function(e) { alert('sibling handler'); },
        false
    );
</script>