DOM事件

DOM級(jí)別與DOM事件

DOM級(jí)別:DOM0級(jí),DOM1級(jí),DOM2級(jí)和DOM3級(jí)
DOM事件:DOM0級(jí)事件處理,DOM2級(jí)事件處理和DOM3級(jí)事件處理
(1級(jí)DOM標(biāo)準(zhǔn)中沒有定義事件相關(guān)內(nèi)容)
目前最廣泛標(biāo)準(zhǔn)是 DOM2。

DOM level 0

<button id=X onclick="print"></button>
<button id=Y onclick="print()"></button> 
<button id=Z onclick="print.call()"></button> 

<script>
   function print(){
     console.log('hi')
   }
   
    X.onclick = print 
    Y.onclick = print()
    Z.onclick = print.call()
</script>

請(qǐng)問上面哪幾個(gè)能打印出 ‘hi’

<button id=Y onclick="print()"></button> 
<button id=Z onclick="print.call()"></button> 

X.onclick = print 

onclick = "要執(zhí)行的代碼”
用戶一旦點(diǎn)擊,瀏覽器就 eval("要執(zhí)行的代碼") 即 eval("print")

function print(){
    console.log('hi')
}
eval('print') // ? print(){console.log('hi')}
eval('print()') // hi
eval('print.call()') // hi
X.onclick = print // 類型為 函數(shù)對(duì)象
// 一旦用戶點(diǎn)擊,瀏覽器就執(zhí)行 X.onclick.call(X,{})  
// X.onclick 需要一個(gè)函數(shù)

DOM level 2

<button id=X >X</button>

<script>
  X.addEventListener('click',function(){console.log('1)}) // 1
  X.onclick = function(){console.log('2')} 
  
// 兩者的區(qū)別,后面的是一個(gè)屬性,是唯一的,后面的會(huì)覆蓋前面的
// 前者是一個(gè)隊(duì)列模型,先進(jìn)先出,函數(shù)會(huì)依次觸發(fā)

</script>
function f1(){console.log(1)}
function f2(){console.log(2)}

X.addEventListener('click',f1)
X.addEventListener('click',f2)
// 1
// 2
X.removeEventListener('click',f1)
// 2

DOM事件流

addEventListener的第三個(gè)參數(shù)為指定事件是否在捕獲階段執(zhí)行,設(shè)置為true表示事件在捕獲階段執(zhí)行,而設(shè)置為false表示事件在冒泡階段執(zhí)行。

<div class="grand1">
  爺爺
  <div class="parent">
    爸爸
    <div class="child">
      兒子
    </div>
  </div>
</div>

<script>
// 當(dāng)點(diǎn)擊了兒子之后,是否點(diǎn)擊了爸爸和爺爺
// yes

// 當(dāng)點(diǎn)擊兒子之后,三個(gè)函數(shù)是否調(diào)用
grand1.addEventListener('click',function f1(){
  console.log('爺爺')
})
parent1.addEventListener('click',function f2(){
  console.log('爸爸')
})
child1.addEventListener('click',function f3(){
  console.log('兒子')
})

// 請(qǐng)問 f1 f2 f3執(zhí)行順序
// 1 2 3 or 3 2 1

// 都可以
// 傳第三個(gè)參數(shù)值為 false / null / NaN / '' / 0 / undefined / 或者默認(rèn)不傳值
grand1.addEventListener('click',function f1(){
  console.log('爺爺')
})
parent1.addEventListener('click',function f2(){
  console.log('爸爸')
})
child1.addEventListener('click',function f3(){
  console.log('兒子')
})
// 執(zhí)行順序?yàn)?3 2 1
// 兒子 爸爸 爺爺

// 傳第三個(gè)參數(shù)為 ture
grand1.addEventListener('click',function f1(){
  console.log('爺爺')
},true)
parent1.addEventListener('click',function f2(){
  console.log('爸爸')
},true)
child1.addEventListener('click',function f3(){
  console.log('兒子')
},true)
// 執(zhí)行順序?yàn)?1 2 3
// 爺爺 爸爸 兒子
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 事件流 JavaScript與HTML之間的交互是通過事件實(shí)現(xiàn)的。事件,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特定的交互...
    DHFE閱讀 910評(píng)論 0 3
  • 在項(xiàng)目開發(fā)時(shí),我們時(shí)常需要考慮用戶在使用產(chǎn)品時(shí)產(chǎn)生的各種各樣的交互事件,比如鼠標(biāo)點(diǎn)擊事件、敲擊鍵盤事件等。這樣的事...
    勞卜閱讀 5,078評(píng)論 8 42
  • 什么是DOM? 文檔對(duì)象模型,HTML 是一棵樹,DOM 也是一棵樹。對(duì) DOM 的理解,可以暫時(shí)先拋開瀏覽器的內(nèi)...
    209bd3bc6844閱讀 371評(píng)論 0 0
  • 什么是DOM? DOM全稱為The Document Object Model,應(yīng)該理解為是一個(gè)規(guī)范,定義了HTM...
    夜舞暗瀾_3ea2閱讀 871評(píng)論 1 3
  • 一、問答 1. dom對(duì)象的innerText和innerHTML有什么區(qū)別? innerHTML: 也就是從對(duì)象...
    饑人谷_羅偉恩閱讀 697評(píng)論 0 2

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