JS中addEventListener的使用示例詳解
使用addEventListener綁定事件:MDN中addEventListener()說明
使用removeEventListener
可以解綁事件: MDN中removeEventListener()說明
1,我們使用addEventListener的時(shí)候,主要用來實(shí)現(xiàn)事件的綁定監(jiān)聽的
存在三個(gè)參數(shù) target.addEventListener(type, listener, useCapture);
type: 表示監(jiān)聽事件類型的字符串。類似于click,mouseover...
listener: 用來監(jiān)聽處理的函數(shù)方法
useCapture: 默認(rèn)是false,事件冒泡,可以設(shè)置為true為事件捕獲
這里需要了解一下基本的事件流(事件捕獲->事件目標(biāo)->事件冒泡)
事件捕獲: 事件從最頂層元素一直傳遞到目標(biāo)元素(就是從外往內(nèi))
事件目標(biāo): 事件到達(dá)目標(biāo)元素. 如果事件指定不冒泡. 那就會(huì)在這里中止
事件冒泡: 事件從目標(biāo)元素父元素向上逐級(jí)傳遞直到最頂層元素(就是從里往外)
如下圖所示顯示事件捕獲和事件冒泡的原型圖:
2,通過實(shí)際的案列展示事件的綁定
HTML
元素p
是div
的子元素
<div class="div"> <p class="p">addEventListener</p> </div>
(1), 默認(rèn)形式(false
)是按照事件冒泡觸發(fā)
如果子元素和父元素同時(shí)使用addEventListener
觸發(fā)事件,在子元素事件觸發(fā)的時(shí)候,父元素的事件會(huì)在子元素事件觸發(fā)完成之后觸發(fā),這便是事件冒泡,從內(nèi)到外先觸發(fā)內(nèi)層的p綁定的事件,再觸發(fā)外層的div綁定的事件
const div = document.querySelector(".div") const p = document.querySelector(".p") p.addEventListener("click", pClickEvent, false) div.addEventListener("click", divClickEvent, false) function pClickEvent() { alert("p 元素點(diǎn)擊事件觸發(fā)") } function divClickEvent() { alert("div 元素點(diǎn)擊事件觸發(fā)") }
結(jié)果:
(2), 事件捕獲(true
)
如果子元素和父元素同時(shí)使用addEventListener
觸發(fā)事件,同時(shí)設(shè)置第三個(gè)參數(shù)是true
,說明事件是按照捕獲的形式觸發(fā),從外到內(nèi)先觸發(fā)外層的div綁定的事件,再觸發(fā)內(nèi)層的p綁定的事件
const div = document.querySelector(".div") const p = document.querySelector(".p") p.addEventListener("click", pClickEvent, true) div.addEventListener("click", divClickEvent, true) function divClickEvent() { alert("div 元素點(diǎn)擊事件觸發(fā)") } function pClickEvent() { alert("p 元素點(diǎn)擊事件觸發(fā)") }
結(jié)果:
(3). 解除綁定(removeEventListener
)
const div = document.querySelector(".div") const p = document.querySelector(".p") const btn = document.querySelector(".btn") div.addEventListener("click", divClickEvent) p.addEventListener("click", pClickEvent) function divClickEvent() { alert("div 元素點(diǎn)擊事件觸發(fā)") } function pClickEvent() { alert("p 元素點(diǎn)擊事件觸發(fā)") } btn.onclick = () => { div.removeEventListener("click", divClickEvent) p.removeEventListener("click", pClickEvent) }
結(jié)果:
(4), 需要注意點(diǎn)!
(1)如果綁定事件的時(shí)候給addEventListener
傳遞了第三個(gè)參數(shù)為true
,那么解除綁定的時(shí)候也需要給removeEventListener
傳遞第三個(gè)參數(shù)為true
,否則解綁會(huì)失敗
div.addEventListener("click", divClickEvent, true) p.addEventListener("click", pClickEvent, true)
如果綁定的形式為上面的類型,解除綁定必須給定為true
div.removeEventListener("click", divClickEvent,true) p.removeEventListener("click", pClickEvent,true)
(2)使用addEventListener
綁定事件的時(shí)候不推薦使用箭頭函數(shù)或者匿名函數(shù),這樣會(huì)出現(xiàn)removeEventListener
無法解除綁定的問題
下面情況就會(huì)出現(xiàn)removeEventListener
會(huì)無效化
div.addEventListener("click", () => {console.log(123, '123')}) div.removeEventListener("click", () => {console.log(123, '123')})
到此這篇關(guān)于JS中addEventListener的使用的文章就介紹到這了,更多相關(guān)js addEventListener使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- js中onclick和addEventListener的區(qū)別
- js中onclick和addEventListener的區(qū)別詳解
- Js on及addEventListener原理用法區(qū)別解析
- js中addEventListener()與removeEventListener()用法案例分析
- JavaScript使用addEventListener添加事件監(jiān)聽用法實(shí)例
- window.addEventListener來解決讓一個(gè)js事件執(zhí)行多個(gè)函數(shù)
- JS在IE和FF下attachEvent,addEventListener學(xué)習(xí)筆記
- Javascript 的addEventListener()及attachEvent()區(qū)別分析
相關(guān)文章
JavaScript如何對(duì)圖片進(jìn)行黑白化
這篇文章主要介紹了JS對(duì)圖片進(jìn)行黑白化的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-04-04uni-app禁用返回按鈕/返回鍵的具體實(shí)現(xiàn)
今天在使用uni-app開發(fā)登錄頁面時(shí)遇到一個(gè)需求,需要禁用返回按鈕,下面這篇文章主要給大家介紹了關(guān)于uni-app禁用返回按鈕/返回鍵的具體實(shí)現(xiàn),需要的朋友可以參考下2022-11-11Js制作簡(jiǎn)單彈出層DIV在頁面居中 中間顯示遮罩的具體方法
這篇文章介紹了Js制作簡(jiǎn)單彈出層DIV在頁面居中 中間顯示遮罩的具體方法,有需要的朋友可以參考一下2013-08-08基于JavaScript將表單序列化類型的數(shù)據(jù)轉(zhuǎn)化成對(duì)象的處理(允許對(duì)象中包含對(duì)象)
這篇文章主要介紹了基于JavaScript將表單序列化類型的數(shù)據(jù)轉(zhuǎn)化成對(duì)象的處理(允許對(duì)象中包含對(duì)象) 的相關(guān)資料,需要的朋友可以參考下2015-12-12使用JavaScript實(shí)現(xiàn)旋轉(zhuǎn)的彩圈特效
這篇文章主要介紹了使用JavaScript實(shí)現(xiàn)旋轉(zhuǎn)的彩圈特效的相關(guān)資料,需要的朋友可以參考下2015-06-06