JavaScript onclick 和 click 的區別詳解

也就是 addEventListener on 的區別

為什麼需要 addEventListener?

先來看一個片段:

<div id ="box">測試</div>

用 on 的代碼:

windwo.onload = function(){
  var box = document.getElementById("box");
  box.onclick = ()=>console.log("我是 box1");
  box.onclick = ()=>console.log("我是 box2");
}
// 運行結果 : 我是 box2

看到瞭吧,第二個 onclick 事件把第一個onclick 給覆蓋瞭,雖然大部分情況我們用 on 就可以完成我們想要的效果,但是有時我們又需要執行多個相同的事件,很明顯如果用 on 是無法實現的。但是可以使用 addEventListener 實現多次綁定同一個事件並且不會覆蓋上一個事件。

用 addEventListener 的代碼

window.onload = function(){
  var box = document.getElementById("box");
  box.addEventListener("click",()=>console.log("我是 box1"));
  box.addEventListener("click",()=>console.log("我是 box2"));
}
// 運行結果: 我是 box1
            //我是 box2

addEventListener 方法第一個參數填寫事件名,註意不需要寫 on ,第二個參數可以是一個函數,第三個參數是指在冒泡階段還是捕獲處理事件程序,如果為 true 代表捕獲階段處理,如果是 false代表冒泡階段處理,第三個參數可以省略,大多數情況也不需要用到第三個參數,不寫第三個參數默認false。

第三個參數的使用

有時候的情況是這樣的:

<body>
  <div id = "box">
    <div id = "child"></div>
  </div>
</body>

如果我給 box 加 cclick 時間,如果我直接單擊 box 沒有什麼問題,但是如果我單擊的是child元素,那麼它是怎麼樣執行的?

box.addEventListener("click",()=>console.log("box"));
child.addEventListener("click",()=>console.log("child"));
// 執行結果:child -> box

也就是說,默認情況是按照事件冒泡的執行順序進行的

在這裡插入圖片描述

如果第三個參數寫的是 true,則按照事件捕獲的執行順序進行

總結

1.onclick 事件在同一時間隻能指向一個對象

2.addEventListener可以給一個事件註冊多個 listener

3.addEventListener 對於任何 dom 元素都是有效的,而 onclick 僅限於 html 元素

4.addEventListener可以控制 listener 的觸發階段(捕獲/冒泡)

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: