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的更多內容!
推薦閱讀:
- JavaScript之BOM構成和常用事件詳解
- 基於事件冒泡、事件捕獲和事件委托詳解
- Vue中addEventListener() 監聽事件案例講解
- js事件流、事件委托與事件階段實例詳解
- 一起深入理解js中的事件對象