Javascript之DOM2事件綁定

    咱們使用DOM2事件綁定,實際上是讓綁定元素經過原型鏈一直找到EventTarget內置類原型生的addEventListener方式實現的css

    DOM0事件綁定:只能給一個元素的某一個行爲綁定一次方法,第二次綁定的會把前面的覆蓋掉瀏覽器

    好比:box.omclick = function(){函數

        console.log(111)this

    }視頻

        box.onclick = function(){事件

            console.log(222)圖片

        }原型鏈

    輸出結果:222資源

    DOM2時間綁定:rem

    優點1:能夠給某一個元素的同一個行爲綁定多個不一樣的方法,不會被覆蓋掉

    box.addEventListener("click", function(e){

        console.log(11)

    },false);  //true:在捕獲階段;false:冒泡階段

    

    box.addEventListener("click", function(e){

        console.log(22)

    },false);

    輸出結果: 11  22

    優點2:DOM0中的行爲類型,咱們用DOM2同樣能夠綁定,並且DOM2中還提供了一些DOM0沒有的行爲類型 -> DOMContentLoaded:當頁面中的DOM結構(HTML結構加載完成)觸發的行爲

    document.addElentListener("DOMContentLoaded", function(e){}, false)  // 當DOM結構加載完成

    window.onload = function(){} -> 當頁面中的全部資源都加載完成(圖片,HTML,css,音視頻)纔會執行後面的函數;而且在一個頁面中只能用一次,後面再寫會把前面的覆蓋掉;由於它是DOM0事件綁定,因此只能綁定一次;

    jQuery:$(document).ready(function(){}) -> $(function(){}); //只要當頁面中的HTML結構加載完成就會執行對應的函數,而且在同一個頁面中能夠出現屢次;

    // -> DOM2事件綁定

    //-> 而且綁定的行爲是DOM2中新增長的那個DOMContentLoaded;

    window.addEventListener("load", function(){}, false);   //能夠綁定屢次

    三、DOM2

    box.addEventListener("click", function(){

        console.log(this); //this -> box

    }, false)

    // 移除的時候須要保證三個參數,行爲,方法,哪一個階段發生 一點都不能差,在DOM2綁定的時候,咱們通常都給他綁定的是實名函數;

    box.removeEventListener("click", function(e){

        console.log(this); //this -> box

    }, false);

    //四、只能給某個元素的同一個行爲綁定多個"不一樣"的方法(若是方法相同了,就只能留一個)

        當行爲觸發,會按照綁定的前後順序依次把綁定的方法執行

        執行的方法中的this是當前被綁定事件的元素自己

        function fn1(){console.log(1)};

        function fn1(){console.log(2)};

        function fn1(){console.log(3)};

        function fn1(){console.log(4)};

        function fn1(){console.log(5)};

        box.addEventListener("click", fn1, false);

         box.addEventListener("click", fn2, false);

         box.addEventListener("click", fn3, false);

         box.addEventListener("click", fn4, false);

         box.addEventListener("click", fn5, false);

        輸出結果: 1 2 3 4 5

    //在IE6~8瀏覽器中,不支持addEventListener和removeEventListener,若是想使用此事件方法,就只能用attachEvent和detachEvent;

    //只有兩個參數,不能像addEventListener方法那樣能夠控制在那個階段發生,默認只能在冒泡階段發生,行爲須要添加"on"(和DOM0特別的相似),可是DOM0只能綁定一個行爲方法,而它能夠綁定多個行爲方法,可是執行順序是亂的

    box.attachEvent("onclick", fn1);  

此方法和標準的瀏覽器的事件池機制的區別

    一、順序問題:執行的時候順序是混亂的,標準瀏覽器是按照綁定順序依次執行的

    二、重複問題:IE6~8中能夠給同一個元素的同一個行爲綁定多個相同的方法

    三、this問題:IE6~8中當方法執行的時候,方法中的this不是當前元素box,而是window

    //事件池:是用來存儲當前元素行爲綁定的方法(瀏覽器自帶的)

相關文章
相關標籤/搜索