Javascript 绕过event.stopPropagation

Javascript 绕过event.stopPropagation,javascript,javascript-events,event-handling,Javascript,Javascript Events,Event Handling,我正在编写一个Javascript插件(不在jQuery中),它在触发某个事件时开始工作。它在大多数站点上运行良好,但在使用stopPropagation()的站点中我遇到了问题。 是否可以绕过此操作并附加事件? 谢谢 stopPropagation()是如何妨碍你的?(添加更多说明如何/关于您的加载项工作/附加的内容) stopPropagation()所做的唯一一件事就是阻止事件冒泡到接收事件的元素的父元素。因此,不会调用父级上的事件处理程序。但是直接在元素上调用同一事件的多个处理程序 所以

我正在编写一个Javascript插件(不在jQuery中),它在触发某个事件时开始工作。它在大多数站点上运行良好,但在使用stopPropagation()的站点中我遇到了问题。 是否可以绕过此操作并附加事件?
谢谢

stopPropagation()是如何妨碍你的?(添加更多说明如何/关于您的加载项工作/附加的内容)

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

所以。。。只要将事件处理程序直接绑定到第一个生成事件的元素,就可以了。如果你只是试着倾听身体上的事件,并依赖于所有的事件,你就不走运了

e、 g.如果您现在单击红色div,您将得到一个警告,说
同级处理程序
,还有一个说
内联处理程序
,尽管先前定义的内联-
onclick
处理程序调用
stopPropagation()

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


#parent1{背景色:绿色;宽度:300px;高度:300px}
#测试{背景色:红色;宽度:200px;高度:200px}
parent1.addEventListener('click',
函数(e){alert('parent');},
假的
);
test.addEventListener('click',
函数(e){alert('sibling handler');},
假的
);

对于符合标准的浏览器,请使用。对于IE,您可以通过调用元素(可能是
主体
)来捕获鼠标事件。完成任务后,调用
事件
对象的
src元素

javascript附加组件?你是说firefox插件吗?它是在网站加载时激活的JavaScript代码,与GreaseMonkey非常相似,只是它不是firefox特定的。谢谢,但我需要捕获所有事件,而不仅仅是一个对象。在文档上捕获事件将捕获它,无论它在哪个元素上触发;IE只允许捕获鼠标事件。你能描述一下为什么要在任意页面上捕获所有事件吗?我承认这是一个有效的想法。事实上,我在写我的答案时考虑了一下。但是使用捕获阶段会给你带来很多麻烦。每个浏览器支持的捕获阶段略有不同
addEventListener(x,y,true)
在不同浏览器中的行为略有不同。当然IE有自己的做事方式(
setCapture
relaseCapture
)。和IE(至少安德鲁,谢谢。我不确定我现在能透露更多的细节。jitter,谢谢。@jitter你能详细解释一下“头痛”吗浏览器之间的差异呢?我正在开发一个管理大量事件的库,我很难找到总结这些差异的文章。我希望能够四处走动
stopPropagation()
破坏功能。我希望您能对此有所了解。谢谢,我实际上是在寻找一种更通用的方式来捕捉所有事件,您关于“运气不佳”的评论也有所帮助。
<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>