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