DOM事件類

基本概念:DOM事件的級(jí)別

DOM0:element.onclick=function(){}
DOM1:(沒(méi)有設(shè)計(jì)和事件相關(guān)的東西)
DOM2:element.addEventListener('click',function(){},false)
DOM3:element.addEventListener('keyup',function(){},false)

DOM事件模型

指的就是冒泡或捕獲

DOM事件流

事件流含義,如 :點(diǎn)擊鼠標(biāo)的事件如何傳遞到頁(yè)面上,這就是事件流。
完整事件流三個(gè)階段:捕獲、目標(biāo)階段、冒泡

描述DOM事件捕獲的具體流程

捕獲:window->document->html->body->....->目標(biāo)元素
冒泡:與捕獲相反

Event對(duì)象的常見(jiàn)應(yīng)用

  • event.preventDefault()
    阻止默認(rèn)行為
  • event.stopPropagation()
    阻止冒泡行為
  • event.stopImmediatePropagation()
    事件響應(yīng)優(yōu)先級(jí)如,
    一個(gè)按鈕,同時(shí)注冊(cè)了兩個(gè)click事件A和B,如果想在A執(zhí)行的時(shí)候不執(zhí)行B,則在A事件的函數(shù)里加上event.stopImmediatePropagation()就會(huì)阻止B的執(zhí)行
  • event.currentTarget & event.target
    currentTarget始終是監(jiān)聽(tīng)事件者,而target是事件的真正發(fā)出者

自定義事件

var event = new Event('custom')
DOM.addEventListener('custom',function(){
  console.log('custom')
})
DOM.dispatchEvent(event)

兼容性:

在 IE 中使用 attachEvent()與使用 DOM0 級(jí)方法的主要區(qū)別在于事件處理程序的作用域。在使 用 DOM0 級(jí)方法的情況下,事件處理程序會(huì)在其所屬元素的作用域內(nèi)運(yùn)行;在使用 attachEvent()方 法的情況下,事件處理程序會(huì)在全局作用域中運(yùn)行,因此 this 等于 window。來(lái)看下面的例子。

var btn = document.getElementById("myBtn");
  btn.attachEvent("onclick", function(){
    alert(this === window); //true
});

在編寫(xiě)跨瀏覽器的代碼時(shí),牢記這一區(qū)別非常重要。

//兼容DOM0級(jí)方法、DOM2級(jí)方法和IE方法
var EventUtil = {
    addHandler: function(element, type, handler){
        if (element.addEventListener){  //DOM2
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent){  //IE 了在 IE8 及更早版本中運(yùn)行,此時(shí)的事件類型必須加上"on"前綴
            element.attachEvent("on" + type, handler);
        } else {
            element["on" + type] = handler;  //DOM0
        }
    },
    removeHandler: function(element, type, handler){
        if (element.removeEventListener){
            element.removeEventListener(type, handler, false);
        } else if (element.detachEvent){
            element.detachEvent("on" + type, handler);
        } else {
            element["on" + type] = null;
    } }
};
//注意:addHandler()和 removeHandler()沒(méi)有考慮到所有的瀏覽器問(wèn)題,例如在 IE 中的作用域問(wèn)題。不過(guò),使用它們添加和移除事件處理程序還是足夠了。此外還要注意,DOM0 級(jí)對(duì)每個(gè)事件只支持一 個(gè)事件處理程序。好在,只支持 DOM0 級(jí)的瀏覽器已經(jīng)沒(méi)有那么多了,因此這對(duì)你而言應(yīng)該不是什么 問(wèn)題。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 聲明:本文來(lái)源于http://www.webzsky.com/?p=731我只是在這里作為自己的學(xué)習(xí)筆記整理一下(...
    angryyan閱讀 7,242評(píng)論 1 6
  • 以下文章為轉(zhuǎn)載,對(duì)理解JavaScript中的事件處理機(jī)制很有幫助,淺顯易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy閱讀 3,167評(píng)論 1 10
  • 事件流: 事件流:頁(yè)面接收事件的順序。 IE定義的:事件冒泡流(由最具體的元素依次傳播到DOM樹(shù)的最上層的Docu...
    xiaoguo16閱讀 658評(píng)論 0 0
  • dom對(duì)象的innerText和innerHTML有什么區(qū)別? innerHTML指的是從對(duì)象的起始位置到終止位置...
    coolheadedY閱讀 577評(píng)論 0 0
  • 跑步地點(diǎn):天津,青鳥(niǎo)勝地健身 跑步里程:4公里 累計(jì)里程:4公里
    種花家的小小兔子閱讀 214評(píng)論 0 0

友情鏈接更多精彩內(nèi)容