400-650-7353
您所在的位置:首頁(yè) > IT干貨資料 > web前端 > 【W(wǎng)eb前端基礎知識】DOM級事件綁定

【W(wǎng)eb前端基礎知識】DOM級事件綁定

  • 發(fā)布: 優(yōu)就業(yè)it培訓
  • 來(lái)源:
  • 2021-10-29 15:40:27
  • 閱讀()
  • 分享
  • 手機端入口

今天從事件流,DOM0級事件綁定,DOM2級事件綁定,低版本IE事件綁定等方面來(lái)學(xué)習事件。

事件流

當你單擊了某個(gè)元素,單擊事件不僅僅發(fā)生在這個(gè)元素上,你也單擊了它的父元素、父元素的父元素、……它的祖先元素,甚至單擊了整個(gè)頁(yè)面。

“事件流”描述的是頁(yè)面上各個(gè)元素接收事件的順序。

我們?yōu)榱嗣枋鍪录膫鞑ロ樞,特意人為規定了兩個(gè)階段:捕獲階段capture pahse、冒泡階段bubbling phase。點(diǎn)擊頁(yè)面上的一個(gè)元素,事件在哪個(gè)階段觸發(fā),這取決于添加事件監聽(tīng)的方法。

DOM0級事件綁定

DOM分為級別,DOM0級、1級、2級、3級,是不同的標準,標準一直在升級。

我們之前學(xué)習的 obj.onclick = function () {} 這種注冊監聽(tīng)的寫(xiě)法,就是DOM0級的事件綁定方法。就是把onclick當做屬性添加給了oDiv元素。

通過(guò)實(shí)驗,我們發(fā)現,這種事件添加方法,只能監聽(tīng)冒泡過(guò)程。事件的捕獲階段,沒(méi)有監聽(tīng)成功。

這里需要注意,在IE9、Chrome里面,事件會(huì )冒泡到window對象,而IE6、7、8僅僅冒泡到document對象。

另外,用這種方法綁定的監聽(tīng),this指的是觸發(fā)這個(gè)事件的元素,沒(méi)有任何的瀏覽器兼容問(wèn)題。

DOM0級還有一種寫(xiě)法,直接將監聽(tīng)寫(xiě)在標簽里面,工作中不許用:

寫(xiě)在HTML標簽里面代碼耦合性很強,三層沒(méi)有完全分離,工作中不用的。這種寫(xiě)法,也是監聽(tīng)冒泡階段。

用DOM0級添加事件監聽(tīng),同一個(gè)元素不能有兩個(gè)同樣事件監聽(tīng),比如:

  1. box.onclick = function () { 
  2.    alert(1); 
  3.  } 
  4.    box.onclick = function () { 
  5.    alert(2); 
  6.  } 

以JS代碼后出現的為準,它會(huì )覆蓋先寫(xiě)的函數。所以點(diǎn)擊box彈出2。

DOM2級事件綁定

DOM1級規范中,沒(méi)有對事件進(jìn)行改動(dòng),所以不再贅述。

DOM2級做了新的規范,不用on來(lái)綁定監聽(tīng)了,而是使用一個(gè)方法 addEventListener()。它接受三個(gè)參數:什么事件、函數、是否監聽(tīng)捕獲階段。

第1個(gè)參數:事件名不用寫(xiě)on,比如:click、mouseover 、mouseout

第2個(gè)參數:函數可以是匿名函數,也可以是有名函數

第3個(gè)參數:布爾值,true表示監聽(tīng)捕獲、false表示監聽(tīng)冒泡階段

比如:

  1. box.addEventListener("click", funciton () { 
  2.     alert(1); 
  3. }, true); 

第三個(gè)參數是true,表示監聽(tīng)box的捕獲階段的單擊事件。

addEventListener可以重復添加相同事件名的事件:我們給box1的綁定了兩個(gè)事件冒泡階段的監聽(tīng),不會(huì )覆蓋,兩個(gè)監聽(tīng)的函數都會(huì )執行,按照代碼執行順序。

  1. box.addEventListener("click", funciton () { 
  2.     alert(1); 
  3. }, true); 
  4. box.addEventListener("click", funciton () { 
  5.     alert(2); 
  6. }, true); 

先彈出1,然后彈出2。

低版本IE的事件綁定

現在仍有少量的用戶(hù)在使用IE8,所以我們把低版本的IE事件綁定說(shuō)明一下。

IE6、7、8不支持addEventListener()方法,支持 attachEvent() 方法。

  1. box.attachEvent("onclick"function () { 
  2.   alert("click"); 
  3. }); 

attachEvent方法沒(méi)有第三個(gè)參數,也就是說(shuō),不能選擇監聽(tīng)捕獲、冒泡,只能監聽(tīng)冒泡階段。

第一個(gè)參數,必須寫(xiě)on,和addEventListener()不一樣;

第二個(gè)參數,就是事件處理函數

沒(méi)有第三個(gè)參數,只能監聽(tīng)冒泡。所以和DOM0事件寫(xiě)法一樣(比如onclick)。

低版本IE的事件監聽(tīng)attachEvent:事件處理函數里面的this,不是觸發(fā)事件的這個(gè)元素,而是window對象!

并且,同一個(gè)事件名的多個(gè)監聽(tīng),會(huì )反著(zhù)執行:

  1. box.attachEvent("onclick"function () { 
  2.   alert(1); 
  3. }); 
  4. box.attachEvent("onclick"function () { 
  5.   alert(2); 
  6. }); 
  7. box.attachEvent("onclick"function () { 
  8.   alert(3); 
  9. }); 

結果會(huì )彈出3、2、1。

文章“【W(wǎng)eb前端基礎知識】DOM級事件綁定”已幫助

更多內容

>>本文地址:http://www.lakeplacidphc.com/zhuanye/2021/70628.html

THE END  

聲明:本站稿件版權均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉載。

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個(gè)方向的工作?

獲取測試結果
  • 大前端大前端
  • 大數據大數據
  • 互聯(lián)網(wǎng)營(yíng)銷(xiāo)互聯(lián)網(wǎng)營(yíng)銷(xiāo)
  • JavaJava
  • Linux云計算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運營(yíng)全域電商運營(yíng)
  • 軟件測試軟件測試
  • 室內設計室內設計
  • 平面設計平面設計
  • 電商設計電商設計
  • 網(wǎng)頁(yè)設計網(wǎng)頁(yè)設計
  • 全鏈路UI/UE設計UI設計
  • VR/AR游戲開(kāi)發(fā)VR/AR
  • 網(wǎng)絡(luò )安全網(wǎng)絡(luò )安全
  • 新媒體與短視頻運營(yíng)新媒體
  • 直播帶貨直播帶貨
  • 智能機器人軟件開(kāi)發(fā)智能機器人
 

快速通道fast track

近期開(kāi)班時(shí)間TIME