JavaScript事件的委托(代理)的用法示例詳解
簡介
說明
本文用示例介紹JavaScript中的事件(Event)的委托(代理)的用法。
事件委托簡介
事件委托,也叫事件代理,是JavaScript中綁定事件的一種常用技巧。就是將原本需要綁定在子元素的響應(yīng)事件委托給父元素或更外層元素,讓外層元素?fù)?dān)當(dāng)事件監(jiān)聽的職務(wù)。
事件代理的原理是DOM元素的事件冒泡。
事件委托的優(yōu)點
1.節(jié)省內(nèi)存,減少事件的綁定
原本需要綁定在所有子元素的事件,使用事件委托之后,只需要一個事件綁定即可。
2.可以動態(tài)綁定事件,新增的子對象事件可以被已綁定的事件處理
因為新增的子對象產(chǎn)生的事件,最終也會冒泡到父元素,從而能夠處理
示例:事件委托
需求:一個列表,點擊列表元素時彈出其內(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> <li>我是第2個li</li> <li>我是第3個li</li> </ul> <script> let ul = document.getElementById('id-ul'); ul.addEventListener("click", function (ev) { alert(ev.target.innerText); }) </script> </body> </html>
結(jié)果
寫法2:每個子元素都綁定事件
每個子元素都綁定事件。
<!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> <li>我是第2個li</li> <li>我是第3個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é)果
示例:新增元素
需求:每點擊“生成按鈕”,就生成一個子的列表元素。然后,每點擊一次列表元素,會彈出其內(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é)果
可以看到,原有的元素和新建的元素的事件都會被處理。
寫法2:每個子元素都綁定事件
<!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é)果
可以看到:原有的元素的點擊事件會被處理,但新加入的不會被處理。
到此這篇關(guān)于JavaScript事件的委托(代理)的用法示例詳解的文章就介紹到這了,更多相關(guān)JavaScript事件委托內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript constructor和instanceof,JSOO中的一對歡喜冤家
現(xiàn)在流行面向?qū)ο?JavaScript當(dāng)然要迎頭趕上. 有說法JavaScript就是徹頭徹尾的OO語言,但我覺得JavaScript實現(xiàn)面向?qū)ο蟮某绦蜻€是有諸多不便的.2009-05-05swiper+echarts實現(xiàn)多個儀表盤左右滾動效果
這篇文章主要為大家詳細(xì)介紹了swiper+echarts實現(xiàn)多個儀表盤左右滾動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06JS+CSS實現(xiàn)簡單的二級下拉導(dǎo)航菜單效果
這篇文章主要介紹了JS+CSS實現(xiàn)簡單的二級下拉導(dǎo)航菜單效果,通過簡單的JavaScript頁面元素遍歷及樣式操作實現(xiàn)下拉菜單效果,非常簡單實用,需要的朋友可以參考下2015-09-09可以用鼠標(biāo)拖動的DIV實現(xiàn)思路及代碼
DIV可以拖動的效果,想必大家都有見到過吧,在本文也為大家實現(xiàn)一個不錯的可以用鼠標(biāo)拖動的div,感興趣的各位不要錯過2013-10-10JavaScript 函數(shù)調(diào)用規(guī)則
2009-09-09javascript 文字上下間隔滾動的代碼 符合WEB標(biāo)準(zhǔn) 腳本之家修正版
javascript 文字上下間隔滾動的代碼 符合WEB標(biāo)準(zhǔn) 腳本之家修正版,這里提供了兩個版本,第二個在firefox下運行有些問題大家可以修改下,第一個的高度問題,已經(jīng)修正,其實就是簡單的加了css樣式。2009-12-12iframe實現(xiàn)高度自適應(yīng)小程序web-view方案
這篇文章主要為大家介紹了iframe實現(xiàn)高度自適應(yīng)小程序web-view方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01uni-app操作數(shù)據(jù)庫的三種方法總結(jié)
數(shù)據(jù)庫操作的,可以采用多方案,下面這篇文章主要給大家介紹了關(guān)于uni-app操作數(shù)據(jù)庫的三種方法,文中通過實例代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05