首先來說講事件流是什麼。javascript
在javascript與html之間交流的時候,是經過事件來實現的,事件就是文檔或瀏覽器窗口中發生的一些特定的交互瞬間。瀏覽器在接受這些事件的時候,也是有必定的順序的,至此,事件流的定義也就呼之欲出了:從頁面中接受事件的順序,稱之爲:事件流。html
那麼,頁面的事件流究竟是什麼樣的呢?他究竟是怎麼樣的一個順序呢?對此,IE和Netscape Communicator開發團隊各持己見,首先,IE認爲,事件流就是事件冒泡流(下面會講到),而Netscape Communicator則認爲,事件流是事件捕獲流(下面會講到)。java
首先講一下IE的事件流,也就是事件冒泡。即事件開始是由最具體的一個元素接收,而後逐級向上傳播到較爲不具體的節點。簡單來說,就是從你所綁定事件的那個元素起,而後向外層傳遞,例如傳到他的父元素,再傳到父元素的父元素,以此類推,最後傳播到document上,這個就是IE的事件流——事件冒泡。(自我感受這東西就跟炸彈爆炸同樣,由內向外的,嘿嘿~)瀏覽器
其次爲Netscape Communicator的事件流,也就是事件捕獲。它的觀點是最不太具體的節點應該最先接收到事件,而最具體的節點是最後接收到事件(感受恰好跟IE相反,不愧是一個能與IE一教高下的瀏覽器);簡單拿單擊事件來說,就是雖然你將事件綁定在了最裏面的一個子元素上,可是在你單擊這個元素的時候,瀏覽器捕獲的順序是 Document > html > 父元素····>你綁定事件的元素,這是一個由外到內的過程。可是因爲老版本瀏覽器不支持這種事件流,所以如今不多有人使用事件捕獲,建議你們放心的使用事件冒泡~htm
最後講一下DOM事件流,「DOM2級事件」規定事件流包括三個階段:事件捕獲階段、處於目標階段和事件冒泡階段。簡單來說就是當事件發生時,首先通過捕獲階段,一層一層往下,到body後就中止了,而後進入下一個階段,即「處於目標階段」,這時候的事件就在目標元素上發生了,最後是事件冒泡階段,即事件又向上傳遞迴文檔。blog
(DOM事件流示意圖)事件