dom0 事件的特點:
1. dom0 事件就是直接通過 onclick 綁定到 html上的事件
??? <input onclick="xx"/>
???? 或者
???? input.onclick = function(){? ...? }
2. 清理dom0 事件時,只需給該事件賦值為 null
??? input.onclick = null
3. 同一個元素的同一種事件只能綁定一個函數(shù),否則后面的函數(shù)會覆蓋之前的函數(shù)
4. 不存在兼容性問題
dom2 事件的特點:
1. dom2 事件是通過 addEventListener 綁定的事件
2.同一個元素的同種事件可以綁定多個函數(shù),按照綁定順序執(zhí)行
? function a() {?? ...?? }
? function b() {?? ...?? }
?? input.addEventListener( "click" ,a)
??? input.addEventListener( "click" ,b)
3.清除 dom2 事件時,使用 removeEventListener
???? input.removeEventListener( "click" ,a)
?dom2 級事件有三個參數(shù): 第一個參數(shù)是事件名(如click);
??????????? 第二個參數(shù)是事件處理程序函數(shù);
??????????? ?? 第三個參數(shù)如果是true則表示在捕獲階段調(diào)用,為false表示在冒泡階段調(diào)用。
addEventListener():可以為元素添加多個事件處理程序,觸發(fā)時會按照添加順序依次調(diào)用。
removeEventListener():不能移除匿名添加的函數(shù)。
DOM2 包含3個事件:事件捕獲階段、處于目標階段和事件冒泡階段
? ? <span>
???????????? <a>? </a>
??? </span>
點擊a后capturing(捕捉)階段事件傳播會從document-> span->a,然后發(fā)生在a,最后bubbling(冒泡)階段事件傳播會從a->span->document
事件冒泡和事件捕獲
??????? DOM2級事件處理添加進去的事件,我們可以控制事件的冒泡或是捕獲過程。當addEventListener方法的第三個參數(shù)為true時,表示只進行事件捕獲,不執(zhí)行事件冒泡,再捕獲的過程中,觸發(fā)途徑標簽的對應事件函數(shù)。當?shù)谌齻€參數(shù)為false,表示執(zhí)行事件冒泡的過程(默認情況)
DOM3級事件
?????? DOM3級事件在DOM2級事件的基礎上添加了更多的事件類型,全部類型如下:
?????? UI事件,當用戶與頁面上的元素交互時觸發(fā),如:load、scroll
?????? 焦點事件,當元素獲得或失去焦點時觸發(fā),如:blur、focus
?????? 鼠標事件,當用戶通過鼠標在頁面執(zhí)行操作時觸發(fā)如:dbclick、mouseup
?????? 滾輪事件,當使用鼠標滾輪或類似設備時觸發(fā),如:mousewheel
?????? 文本事件,當在文檔中輸入文本時觸發(fā),如:textInput
??????? 鍵盤事件,當用戶通過鍵盤在頁面上執(zhí)行操作時觸發(fā),如:keydown、keypress
??????? 合成事件,當為IME(輸入法編輯器)輸入字符時觸發(fā),如:compositionstart
??????? 變動事件,當?shù)讓覦OM結(jié)構(gòu)發(fā)生變化時觸發(fā),如:DOMsubtreeModified
???????? 同時DOM3級事件也允許使用者自定義一些事件。
注意:
1)、cancelBubble可以取消事件冒泡;
2)、stopPropagation可以取消事件冒泡和下沉