DOM 事件流

先看一張圖(圖片來自網絡,如有侵權聯繫本博主)
這裏寫圖片描述

這就是一個完整的事件流

DOM(Document Object Model 文檔對象模型),是一個樹型結構。當DOM中某一個HTML元素產生一個事件時,該事件會在該元素結點與DOM的根結點之間按特定的方式進行傳播,也就是說,該條路徑上所經過的所有結點都會收到該事件,這個傳播過程稱之爲DOM事件流。

事件在DOM中傳播的順序有兩種類型:事件捕獲和事件冒泡

冒泡型事件:事件由該結點一直傳播到根結點,一直往上冒。

捕獲型事件:和冒泡型事件剛好相反,它是從根結點一直傳播到該結點,從上到下的一個過程。

標準的事件傳播分爲三個階段:
1)事件捕獲階段
事件沿着DOM數向下傳遞,經歷目標結點的每一個祖先結點,直到目標結點。(如用戶點擊了一個
超鏈接,則該點擊事件將從document結點到html結點,body結點以及包含該鏈接的父親結點)
在此過程中,瀏覽器都會檢測針對該事件的捕獲事件監聽器,並運行該事件監聽器。
2)目標觸發階段
瀏覽器在查找到已經指定給目標元素的事件監聽器後,就會運行該事件監聽器。
3)事件冒泡階段
事件將沿着DOM樹向上傳遞,再次逐個訪問目標元素的祖先結點到document結點。
在此過程中,瀏覽器都會將檢測那些不是捕獲事件監聽器的事件監聽器,並執行它們。

注意:所有的事件都經過捕獲階段和目標階段,但並不是所有的事件都會經過冒泡階段。
例如,讓元素獲得輸入焦點的focus事件以及失去輸入焦點的blur事件就都不會冒泡。

順便解釋下:停止事件冒泡和阻止事件的默認行爲這兩個概念,這兩個概念非常重要,它們對複雜的應用程序處理非常有用。

1.停止事件冒泡

停止事件冒泡是指,停止冒泡型事件的進一步傳遞(取消事件傳遞,不只是停止IE和DOM標準共有的冒泡型事件,我們還可以停止支持DOM標準瀏覽器的捕捉型事件,用topPropagation()方法)。例如上圖中的冒泡型事件傳遞中,在body處理停止事件傳遞後,位於上層的document的事件監聽器就不再收到通知,不再被處理。

2.阻止事件的默認行爲

停止事件的默認行爲是指,通常瀏覽器在事件傳遞並處理完後會執行與該事件關聯的默認動作(如果存在這樣的動作)。例如,如果表單中input type 屬性是 “submit”,點擊後在事件傳播完瀏覽器就自動提交表單。又例如,input 元素的 keydown 事件發生並處理後,瀏覽器默認會將用戶鍵入的字符自動追加到 input 元素的值中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章