JS DOM2級事件基礎


DOM2級事件基礎

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

DOM2事件綁定,其實是讓元素通過原型鏈一直找到EventTarget這個內置類原型上的addEventListener方法實現的

DOM2:DOM0中的行為類型,用DOM2一樣可以綁定;而且DOM2中還提供了一些DOM0沒有的行為類型,DOMContentLoaded:當頁面中的DOM結果(HTML結構)加載完成,觸發的行為


window.onload = function(){} :
當頁面中的所有資源都加載完成(圖片、HTML結構、音視頻。。。)才會執行后面的函數;由於使用DOM0級事件綁定,所以在一個頁面中只能用一次,后面在寫會把前面的覆蓋掉;因為它是采用DOM0事件綁定,所以只能綁定一次

jQuery:$(document).ready(function(){}):
只要當頁面中的HTML結構加載完成就會執行對應的函數;並且在同一個頁面中可以出現多次;
原理:使用DOM2事件綁定,並且綁定的行為是DOM2中新增加的那個DOMContentLoaded

window.addEventListener("load", fucntion(){}, false);
window.addEventListener("load", fucntion(){}, false);


DOM2級事件綁定

HTMLElement.addEventListener(event, callBack, boolean)

boolean:為true捕獲階段觸發, 為false冒泡階段觸發

HTMLElement.removeEventListener(event, callBack, boolean):

使用DOM2級事件綁定回調函數時,使用實名函數時,可以使用HTMLElement.removeEventListener(event, callBack, boolean)來移除對應的事件, event, callBack, boolean一個也不能變

兼容問題

在IE6~8瀏覽器中,我們不支持addEventListener/removeEventListener, 如果想實現DOM2事件綁定只能用attachEvent/detachEvent
它只有兩個參數,不能想addEventListener那樣控制在那個階段發生, 默認只能在冒泡階段發生
行為需要添加“on”,和DOM0特別類似

和標准瀏覽器的事件池機制對比:

  • 順序問題:IE6~8執行的時候順序是混亂的,標准瀏覽器是按照綁定順序依次執行的
  • 重復問題:IE6~8可以給同一個元素的同一個行為綁定多個相同的方法
  • THIS問題:IE6~8中當方法執行的時候,THIS指向WINDOW,標准瀏覽器指向的當前的元素

DOM2事件機制

  • 只能給某個元素的同一個行為綁定多個“不同”的方法(如果方法相同了只能保留一個)
  • 當行為觸發,會按照綁定的先后順序依次把綁定的方法執行
  • 執行的方法中的this是當前被綁定事件的元素本身

事件池

存儲當前元素行為綁定的方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM