淺談javascript中的事件冒泡和事件捕獲
1.事件冒泡
IE 的事件流叫做事件冒泡(event bubbling),即事件開始時(shí)由最具體的元素(文檔中嵌套層次最深的那個(gè)節(jié)點(diǎn))接收,然后逐級向上傳播到較為不具體的節(jié)點(diǎn)(文檔)。以下面的HTML 頁面為例:
<!DOCTYPE html> <html> <head> <title>Event Bubbling Example</title> </head> <body> <div id="myDiv">Click Me</div> </body> </html>
如果你單擊了頁面中的<div>元素,那么這個(gè)click 事件會按照如下順序傳播:
(1) <div>
(2) <body>
(3) <html>
(4) document
也就是說,click 事件首先在<div>元素上發(fā)生,而這個(gè)元素就是我們單擊的元素。然后,click事件沿DOM樹向上傳播,在每一級節(jié)點(diǎn)上都會發(fā)生,直至傳播到document 對象。圖13-1 展示了事件冒泡的過程。
所有現(xiàn)代瀏覽器都支持事件冒泡,但在具體實(shí)現(xiàn)上還是有一些差別。IE5.5 及更早版本中的事件冒泡會跳過<html>元素(從<body>直接跳到document)。IE9、Firefox、Chrome 和Safari 則將事件一直冒泡到window 對象。
2.事件捕獲
Netscape Communicator 團(tuán)隊(duì)提出的另一種事件流叫做事件捕獲(event capturing)。事件捕獲的思想是不太具體的節(jié)點(diǎn)應(yīng)該更早接收到事件,而最具體的節(jié)點(diǎn)應(yīng)該最后接收到事件。事件捕獲的用意在于在事件到達(dá)預(yù)定目標(biāo)之前捕獲它。如果仍以前面的HTML 頁面作為演示事件捕獲的例子,那么單擊<div>元素就會以下列順序觸發(fā)click 事件。
(1) document
(2) <html>
(3) <body>
(4) <div>
在事件捕獲過程中,document 對象首先接收到click 事件,然后事件沿DOM 樹依次向下,一直傳播到事件的實(shí)際目標(biāo),即<div>元素。
雖然事件捕獲是Netscape Communicator 唯一支持的事件流模型,但I(xiàn)E9、Safari、Chrome、Opera和Firefox 目前也都支持這種事件流模型。
由于老版本的瀏覽器不支持,因此很少有人使用事件捕獲。我們也建議讀者放心地使用事件冒泡,在有特殊需要時(shí)再使用事件捕獲。
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
解決遍歷時(shí)Array.indexOf產(chǎn)生的性能問題
javascript中數(shù)組是沒有indexOf方法,extjs中給數(shù)據(jù)添加了該方法2012-07-07如何通過遞歸方法實(shí)現(xiàn)用json-diff渲染json字符串對比結(jié)果
JsonDiff是一個(gè)高性能json差異發(fā)現(xiàn)工具,它幾乎可以發(fā)現(xiàn)任何JSON結(jié)構(gòu)的差異,并且將錯(cuò)誤信息反饋給用戶,下面這篇文章主要給大家介紹了關(guān)于如何通過遞歸方法實(shí)現(xiàn)用json-diff渲染json字符串對比結(jié)果的相關(guān)資料,需要的朋友可以參考下2022-12-12JS讀取XML文件數(shù)據(jù)并以table形式顯示數(shù)據(jù)的方法(兼容IE與火狐)
這篇文章主要介紹了JS讀取XML文件數(shù)據(jù)并以table形式顯示數(shù)據(jù)的方法,涉及javascript針對xml節(jié)點(diǎn)操作及HTML表格操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06JS實(shí)現(xiàn)textarea通過換行或者回車把多行數(shù)字分割成數(shù)組并且去掉數(shù)組中空的值
這篇文章主要介紹了JS實(shí)現(xiàn)textarea通過換行或者回車把多行數(shù)字分割成數(shù)組并且去掉數(shù)組中空的值的相關(guān)資料,需要的朋友可以參考下2018-10-10詳解webpack引入第三方庫的方式以及注意事項(xiàng)
這篇文章主要介紹了詳解webpack引入第三方庫的方式以及注意事項(xiàng),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01