網(wǎng)站首頁 前端文檔 正文
簡介
說明
本文用示例介紹JavaScript中的事件(Event)的委托(代理)的用法。
事件委托簡介
事件委托,也叫事件代理,是JavaScript中綁定事件的一種常用技巧。就是將原本需要綁定在子元素的響應(yīng)事件委托給父元素或更外層元素,讓外層元素?fù)?dān)當(dāng)事件監(jiān)聽的職務(wù)。
事件代理的原理是DOM元素的事件冒泡。
事件委托的優(yōu)點(diǎn)
1.節(jié)省內(nèi)存,減少事件的綁定
原本需要綁定在所有子元素的事件,使用事件委托之后,只需要一個(gè)事件綁定即可。
2.可以動(dòng)態(tài)綁定事件,新增的子對象事件可以被已綁定的事件處理
因?yàn)樾略龅淖訉ο螽a(chǎn)生的事件,最終也會(huì)冒泡到父元素,從而能夠處理
示例:事件委托
需求:一個(gè)列表,點(diǎn)擊列表元素時(shí)彈出其內(nèi)容。
寫法1:事件委托
只需在外層元素綁定事件即可。
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>This is title</title> </head> <body> <ul id="id-ul"> <li>我是第1個(gè)li</li> <li>我是第2個(gè)li</li> <li>我是第3個(gè)li</li> </ul> <script> let ul = document.getElementById('id-ul'); ul.addEventListener("click", function (ev) { alert(ev.target.innerText); }) </script> </body> </html>
結(jié)果
寫法2:每個(gè)子元素都綁定事件
每個(gè)子元素都綁定事件。
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>This is title</title> </head> <body> <ul id="id-ul"> <li>我是第1個(gè)li</li> <li>我是第2個(gè)li</li> <li>我是第3個(gè)li</li> </ul> <script> let li = document.querySelectorAll('#id-ul li'); for (let liElement of li) { liElement.addEventListener("click", function (ev) { alert(ev.target.innerText); }); } </script> </body> </html>
結(jié)果
示例:新增元素
需求:每點(diǎn)擊“生成按鈕”,就生成一個(gè)子的列表元素。然后,每點(diǎn)擊一次列表元素,會(huì)彈出其內(nèi)容。
寫法1:事件委托
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>This is title</title> </head> <body> <ul id="id-ul"> <li>1</li> <li>2</li> </ul> <button id="btn">click</button> <script> let num = 3; let eUl = document.querySelector("#id-ul"); let eButton = document.querySelector("#btn"); eButton.addEventListener("click", function () { let newLi = document.createElement("li"); eUl.appendChild(newLi); newLi.innerText = num++; }) eUl.addEventListener("click",function (event) { alert(event.target.innerText); }) </script> </body> </html>
結(jié)果
可以看到,原有的元素和新建的元素的事件都會(huì)被處理。?
寫法2:每個(gè)子元素都綁定事件
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>This is title</title> </head> <body> <ul id="id-ul"> <li>1</li> <li>2</li> </ul> <button id="btn">click</button> <script> let num = 3; let eUl = document.querySelector("#id-ul"); let eButton = document.querySelector("#btn"); let eLi = document.querySelectorAll("#id-ul li"); eButton.addEventListener("click", function () { let newLi = document.createElement("li"); eUl.appendChild(newLi); newLi.innerText = num++; }) for (let eLiElement of eLi) { eLiElement.addEventListener("click",function (event) { alert(event.target.innerText); }) } </script> </body> </html>
結(jié)果
可以看到:原有的元素的點(diǎn)擊事件會(huì)被處理,但新加入的不會(huì)被處理。?
原文鏈接:https://blog.csdn.net/feiying0canglang/article/details/122284458
相關(guān)推薦
- 2022-09-18 AJAX實(shí)現(xiàn)文件上傳功能報(bào)錯(cuò)Current?request?is?not?a?multipart?r
- 2022-09-14 Android自定義視圖中圖片的處理_Android
- 2022-06-23 python入門語句基礎(chǔ)之if語句、while語句_python
- 2022-06-21 C語言詳解無頭單向非循環(huán)鏈表各種操作方法_C 語言
- 2023-04-19 Android使用gradle讀取并保存數(shù)據(jù)到BuildConfg流程詳解_Android
- 2022-03-27 Unity實(shí)現(xiàn)物體跟隨鼠標(biāo)移動(dòng)_C#教程
- 2022-01-15 linux 安裝插件報(bào)錯(cuò):Loaded plugins: fastestmirror
- 2022-12-03 pytorch模型保存與加載中的一些問題實(shí)戰(zhàn)記錄_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支