我在網上看到的大部分代碼使用document.onkeydown
,但MDN只列出了window.onkeydown
。 This comment也建議使用window.onkeydown
。是否有區別或理由使用一個在另一個之上?window.onkeydown和document.onkeydown有什麼區別嗎?
3
A
回答
5
請參閱從Event dispatch and DOM event flow如下圖:
有三種event phases:
的捕獲階段:事件對象必須通過從目標的祖先傳播defaultView給目標的父母。 這個階段也被稱爲捕獲階段。爲此階段註冊的事件監聽器 必須在事件到達其目標 之前處理事件。
目標階段:事件對象必須到達事件對象的event target。這個階段也被稱爲目標階段的 階段。在此階段註冊的事件監聽器必須在事件達到目標時處理事件。如果event type指示該事件不能冒泡,則在完成此階段後,事件對象 必須停止。
的氣泡相:事件對象傳播通過以相反的順序目標的祖先,開始與目標的父 並與defaultView結束。這個階段也被稱爲 冒泡階段。在此階段註冊的事件偵聽器必須在事件達到目標後處理事件。
因此,主要區別在於,事件偵聽器添加到window
將處理事件之後的事件偵聽器在泡沫階段的情況下加入到document
;以及在捕獲階段之前。
相關問題
- 1. .NET和ASP.NET有什麼區別嗎
- 2. RPC和IPC有什麼區別嗎?
- 3. UserLocalServiceUtil.addRoleUser和RoleLocalServiceUtil.addUserRole有什麼區別嗎?
- 4. svg和png img有什麼區別嗎?
- 5. html和*有什麼區別嗎?
- 6. vbNullString和「」之間有什麼區別嗎?
- 7. s ++和* s ++有什麼區別嗎?
- 8. UserDict和Dict有什麼區別嗎?
- 9. INSTR()和CHARINDEX()有什麼區別嗎?
- 10. log4net.Config.BasicConfigurator.Configure()和log4net.Config.XmlConfigurator.Configure()有什麼區別嗎?
- 11. Spring和Spring.net有什麼區別嗎?
- 12. Viterbi CYK和Probabilistic CYK算法有什麼區別,有什麼區別嗎?
- 13. 有什麼區別`和$(Bash中有什麼區別?
- 14. 有什麼區別? :和||
- 15. &&和||有什麼區別?
- 16. 「/」和「/ *」有什麼區別?
- 17. 有什麼區別:。!和:r!?
- 18. ==和===有什麼區別?
- 19. Appender和〜有什麼區別?
- 20. $ @和$ *有什麼區別?
- 21. is和=有什麼區別?
- 22. #.00和#。##有什麼區別?
- 23. `==`和`is`有什麼區別?
- 24. '=='和'==='有什麼區別?
- 25. /和/#/有什麼區別?
- 26. | 0和~~有什麼區別?
- 27. `&`和`ref`有什麼區別?
- 28. ==和===有什麼區別?
- 29. ==和===有什麼區別?
- 30. `{}`和`[]`有什麼區別?
我猜測在文檔上使用窗口的原因是因爲它不必傳播到目前爲止? – Yay295 2014-11-22 02:11:46
@ Yay295你的意思是相反的嗎? – MCTaylor17 2014-11-22 02:36:02
據我所知,如果你使用窗口,它將進入窗口 - >事件 - >窗口,並且如果你使用文檔,它會進入窗口 - >文檔 - >事件 - >文檔 - >窗口。 – Yay295 2014-11-22 02:44:02