1. 程式人生 > >這可能是最簡明扼要的 js事件冒泡機制+阻止默認事件 講解了

這可能是最簡明扼要的 js事件冒泡機制+阻止默認事件 講解了

不支持 自身 eve font def back 綁定 向上 版本

哎 js事件冒泡機制和阻止冒泡 阻止默認行為好像永遠也整不清楚,記了忘 忘了記。。。醉了

這篇文章寫完以後下次再忘記 就呼自己一巴掌,忘一次一巴掌

技術分享圖片

  首先要明白兩個概念——事件和事件流

  事件指的是用戶或瀏覽器自身執行的某種動作,又稱為原始事件模型,例如onclick等

  事件流指的是 從頁面中接收事件的順序,也就是說當一個事件產生時,這個事件的傳播過程就叫做事件流。

事件冒泡:

  從事件目標開始 一級級向上冒泡,到document為止——從裏到外

  IE 5:div--body--document;

  IE6:div--body--html--document;

  mozilla:div--body--html--window

**值得註意的是,IE8-只能傳播到document。

事件捕獲:

  從最外層document開始觸發,最後到最精確的事件目標——從外到裏

**和事件冒泡相反,用意是在事件達到目標前就捕獲它

DOM事件流:

  同時支持兩種事件模型——事件冒泡和事件捕獲,但是捕獲會先發生。兩種事件會觸及dom中所有的對象,從document對象開始,也在document對象中結束。

  DOM標準規定,事件流有3個階段:

  事件捕獲階段——處於目標階段——事件冒泡階段

一張圖以蔽之:

技術分享圖片

綁定事件的時候可以自己選擇是采用事件捕獲還是事件冒泡:

通過addEventListener函數,它有第三個參數,如果設置為true,就是采用事件捕獲,如果是false,則表示事件冒泡

true:捕獲

false:冒泡

element.addEventListener(‘click‘,doSomething,true)

值得註意的是,IE只支持事件冒泡,不支持事件捕獲,也不支持addEventListener,但是它可以使用另一個函數attachEvent來綁定

element.attachEvent(‘onclick‘,doSomething)

阻止事件傳播!!!記了一輩子了都沒記住的地方!!!

普通:

stopPropagation()

IE:

cancleBubble = true;

在捕獲的過程中stopPropagation 後面的冒泡過程就不會發生了

        function stopBubble(){
            if(e&& e.stopPropagation){
                e.stopPropagation();  //非IE
            }else{
                window.event.cancleBubble = true;
            }
        }

阻止默認事件

普通:

preventDefault()

IE:

window.event.returnValue = false;

        function stopDefault(){
            if(e&& e.preventDefault){
                e.preventDefault(); //非IE
            }else{
                window.event.returnValue = false;
            }
        }                                       

總結:

事件冒泡——從裏到外 從a-div-body-html-document-window(低版本IE到document)

事件捕獲——從外到裏 從window-html-body-div-a

阻止冒泡

普通——e.stopPropagation

IE——window.event.cancleBUbble=true;

阻止默認事件

普通——e.preventDefault

IE——window.event.returnValue = false;

這可能是最簡明扼要的 js事件冒泡機制+阻止默認事件 講解了