我正在寫一個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. 可以撤消event.stopProgagation
- 2. 繞過
- 3. 繞過Twitter OAuth
- 4. 繞過條件
- 5. 繞過Cloudflare Scrapeshield
- 6. 繞過max_execution_time?
- 7. 繞過IE9 InfoBar
- 8. 繞過Page.VerifyRenderingInServerForm
- 9. PHP:session_status被繞過?
- 10. urllib2繞過cloudflare
- 11. 繞過ElementTree
- 12. 繞過IncompleteRead異常
- 13. C++繞過載體
- 14. 什麼是繞過
- 15. MVC3 Ajax UpdateTargetId繞過
- 16. 繞過一個「AppendOnlyStringBuilder」
- 17. main.g.cs和app.g.cs繞過?
- 18. 繞過硒在capcha
- 19. 實現j_security_check繞過
- 20. iOS:繞過閃屏
- 21. 如何繞過IndexError
- 22. 繞過Workbook_SheetChange事件
- 23. 繞過一個requiredfieldvalidator
- 24. Scapy繞過Dummynet嗎?
- 25. camel Jpa繞過@consumed
- 26. iCal錯誤繞過
- 27. 繞過curl驗證
- 28. 繞過PHP超時
- 29. 繞過iframe沙箱?
- 30. C#:如何繞過
javascript插件?你的意思是Firefox附加? – 2009-11-24 09:23:27
這是當站點加載時激活的JavaScript代碼,非常像GreaseMonkey,除非它不是Firefox特定的。 – Nir 2009-11-24 09:55:41