JavaScript事件捕獲與事件冒泡原理 IE和DOM之間存在哪些主要差別

來源:互聯網
上載者:User

事件——怎樣使用事件以及IE和DOM事件模型之間存在哪些主要差別。

(1)冒泡型事件:事件按照從最特定的事件目標到最不特定的事件目標(document對象)的順序觸發。

  IE 5.5: div -> body -> document

  IE 6.0: div -> body -> html -> document

  Mozilla 1.0: div -> body -> html -> document -> window

(2)捕獲型事件(event capturing):事件從最不精確的對象(document 對象)開始觸發,然後到最精確(也可以在視窗層級捕獲事件,不過必須由開發人員特別指定)。

(3)DOM事件流:同時支援兩種事件模型:捕獲型事件和冒泡型事件,但是,捕獲型事件先發生。兩種事件流會觸及DOM中的所有對象,從document對象開始,也在document對象結束。

  DOM事件模型最獨特的性質是,文本節點也觸發事件(在IE中不會)。

 

支援W3C標準的瀏覽器在添加事件時用addEventListener(event,fn,useCapture)方法,基中第3個參數useCapture是一個Boolean值,用來設定事件是在事件捕獲時執行,還是事件冒泡時執行。而不相容W3C的瀏覽器(IE)用attachEvent()方法,此方法沒有相關設定,不過IE的事件模型預設是在事件冒泡時執行的,也就是在useCapture等於false的時候執行,所以把在處理事件時把useCapture設定為false是比較安全,也實現相容瀏覽器的效果。

 

事件捕獲階段:事件從最上一級標籤開始往下尋找,直到捕獲到事件目標(target)。事件冒泡階段:事件從事件目標(target)開始,往上冒泡直到頁面的最上一級標籤。  假設一個元素div,它有一個下級元素p。<div>  <p>元素</p></div>這兩個元素都綁定了click事件,如果使用者點擊了p,它在div和p上都觸發了click事件,那這兩個事件處理常式哪個先執行呢?事件順序是什嗎? 兩種模型

以前,Netscape和Microsoft是不同的實現方式。

Netscape中,div先觸發,這就叫做事件捕獲。

Microsoft中,p先觸發,這就叫做事件冒泡。

兩種事件處理順序剛好相反。IE只支援事件冒泡,Mozilla, Opera 7 和 Konqueror兩種都支援,舊版本的Opera’s 和 iCab兩種都不支援 。

 

事件捕獲

當你使用事件捕獲時,父級元素先觸發,子級元素後觸發,即div先觸發,p後觸發。

 

事件冒泡

當你使用事件冒泡時,子級元素先觸發,父級元素後觸發,即p先觸發,div後觸發。


W3C模型

W3C模型是將兩者進行中和,在W3C模型中,任何事件發生時,先從頂層開始進行事件捕獲,直到事件觸發到達了事件來源元素。然後,再從事件來源往上進行事件冒泡,直到到達document。

程式員可以自己選擇綁定事件時採用事件捕獲還是事件冒泡,方法就是綁定事件時通過addEventListener函數,它有三個參數,第三個參數若是true,則表示採用事件捕獲,若是false,則表示採用事件冒泡。

ele.addEventListener('click',doSomething2,true)

true=捕獲

false=冒泡

 

傳統綁定事件方式

在一個支援W3C DOM的瀏覽器中,像這樣一般的綁定事件方式,是採用的事件冒泡方式。

ele.onclick = doSomething2

 

IE瀏覽器

如上面所說,IE只支援事件冒泡,不支援事件捕獲,它也不支援addEventListener函數,不會用第三個參數來表示是冒泡還是捕獲,它提供了另一個函數attachEvent。

ele.attachEvent("onclick", doSomething2);

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.