我正在写一个JavaScript附加组件(不是在jQuery中),当某个事件被触发时它开始工作。它在大多数网站上都能正常工作,但我在使用stopPropagation()的网站中遇到了问题。 无论如何,是否可以绕过此事件并附加事件? 谢谢!绕过event.stopProgagation
回答
stopPropagation()
如何应对? (添加更多描述如何/你的附加作品/附加)。
stopPropagation()
所做的唯一的事情就是阻止事件冒泡到接收事件的元素的父元素。因此父对象的事件处理程序不会被调用。但是直接在元素上的相同事件的多个处理程序都被调用。
所以......只要您将您的事件处理程序直接绑定到事件首先生成的元素上,您就可以。如果您只是试着听例如在body
并依靠所有事件冒泡给你,你是运气不好。
例如如果你现在点击红色的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>
谢谢,我实际上正在寻找一种更通用的方式来捕捉所有事件,并且您对“运气不好”的评论有所帮助。 – Nir 2009-11-25 09:32:57
对于符合标准的浏览器,使用capturing phase。对于IE,您可以通过在元素上调用setCapture来捕获鼠标事件(可能是body
)。一旦你完成了你的工作,请在event
对象的srcElement
上拨打fireEvent。
谢谢,但我需要捕获所有事件,而不仅仅是一个对象。 – Nir 2009-11-25 05:25:52
捕获文档上的事件将捕获它,而不管触发什么元素; IE只会允许捕捉鼠标事件。你能描述为什么你想要在任意页面上捕获_all_事件吗? – 2009-11-25 10:34:05
我承认这是一个有效的想法。实际上,当我写下我的答案时,我想到了它。但是使用捕捉阶段会给你带来许多麻烦。每个浏览器都支持捕捉阶段有点不同。 'addEventListener(x,y,true)'从浏览器到浏览器的行为略有不同。当然,IE有自己的做事方式('setCapture','relaseCapture')。 IE(至少<= IE6)仅支持在捕获阶段捕获鼠标事件。 – jitter 2009-11-25 11:08:40
- 1. 绕过
- 2. 绕过Twitter OAuth
- 3. 绕过条件
- 4. 绕过ElementTree
- 5. CONCAT_GROUP()绕过
- 6. 绕过max_execution_time?
- 7. 绕过curl验证
- 8. 绕过IncompleteRead异常
- 9. C#:如何绕过
- 10. 绕过聚合根
- 11. 绕过Workbook_SheetChange事件
- 12. 如何绕过default_scope?
- 13. 无法绕过ClassCastException
- 14. 绕过PHP超时
- 15. 绕过FreeMarker缓存?
- 16. 绕过一个“AppendOnlyStringBuilder”
- 17. 绕过Java错误
- 18. 绕过硒在capcha
- 19. 绕过一个requiredfieldvalidator
- 20. 如何绕过AppWidgetManager.ACTION_APPWIDGET_PICK?
- 21. 在jQuery中绕过event.preventDefault()
- 22. 临时绕过ListView滚动
- 23. Http请求 - 绕过DNS [.Net]
- 24. cakePHP验证绕过更新
- 25. 绕过joomla菜单系统
- 26. 绕过红宝石api
- 27. 绕过游戏对象
- 28. 如何绕过继承
- 29. 绕过jquery验证插件
- 30. 在导轨上绕过列
javascript插件?你的意思是Firefox附加? – 2009-11-24 09:23:27
这是当站点加载时激活的JavaScript代码,非常像GreaseMonkey,除非它不是Firefox特定的。 – Nir 2009-11-24 09:55:41