2014年辛星解讀Javascript之DOM之冒泡和捕獲,辛星dom

來源:互聯網
上載者:User

2014年辛星解讀Javascript之DOM之冒泡和捕獲,辛星dom

     上篇部落格提到了Javascript事件綁定函數的三個參數,第一個是一個event,第二個是一個function,第三個是一個布爾變數,它用於指定事件傳遞的順序,分為冒泡和捕獲兩種方式,接下來我們將揭開它的神秘面紗,徹底的解讀它。

      首先看如下代碼:

<html><body><div id = "demo"><p id = "tag">辛星</p></demo><script type="text/javascript">document.getElementById("demo").addEventListener("click",mydemo);document.getElementById("tag").addEventListener("click",myshow);function myshow(){ alert("標籤p被觸發");}function mydemo(){ alert("標籤div被觸發");}</script></body></html>
     那麼對於上述HTML檔案,如果我們點擊了“辛星”這個字樣,那麼先出現哪個彈窗呢?如果讀者把上述代碼拷貝下來,尾碼命名為一個HTML檔案,那麼會發現它先彈窗“標籤p被觸發”,等我們對它點了確定之後,才是“標籤div被觸發”,那麼,這是什麼機制呢?

    這就是因為第三個參數在起作用,第三個參數預設是false,即採用冒泡的方式,什麼是冒泡呢?如果大家學習過演算法,會發現有個冒泡排序,很簡單,就是氣泡會從下向上浮動,這種方式表示我們先響應小的標籤,再響應大的標籤,比如這裡p標籤就是div標籤的子項目,因此,這裡先響應p標籤綁定的事件,然後再響應div標籤綁定的點擊事件。

     如果把第三個參數改成true,則效果正好相反,先響應父標籤的事件,再響應子標籤的事件。如果就講這些東西,顯得這篇博文是湊數的,那麼我們就再介紹一些東西。這裡說一下removeEventListener這個函數,它用於解除綁定,即把我們的事件和事件的回呼函數解除綁定。

     不過這個addEventListener和removeEventListener對於瀏覽器的相容性上並不是那麼好,還是IE系列在作怪,IE8之下的版本不支援,但是IE8支援使用element.attachEvent(event,function)來綁定,用element.detachEvent(event,function)來解除綁定。

     對於瀏覽器的相容性,確實一個比較讓人頭疼的問題,特別是在中國這種IE使用量還很大的國家,哎,只能慢慢承受折磨了。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.