JavaScript事件的委托(代理)的用法示例詳解
簡(jiǎn)介
說明
本文用示例介紹JavaScript中的事件(Event)的委托(代理)的用法。
事件委托簡(jiǎn)介
事件委托,也叫事件代理,是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)綁定事件,新增的子對(duì)象事件可以被已綁定的事件處理
因?yàn)樾略龅淖訉?duì)象產(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ì)被處理。
到此這篇關(guān)于JavaScript事件的委托(代理)的用法示例詳解的文章就介紹到這了,更多相關(guān)JavaScript事件委托內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript constructor和instanceof,JSOO中的一對(duì)歡喜冤家
現(xiàn)在流行面向?qū)ο?JavaScript當(dāng)然要迎頭趕上. 有說法JavaScript就是徹頭徹尾的OO語(yǔ)言,但我覺得JavaScript實(shí)現(xiàn)面向?qū)ο蟮某绦蜻€是有諸多不便的.2009-05-05
JS 實(shí)現(xiàn)Div向上浮動(dòng)的實(shí)現(xiàn)代碼
用js實(shí)現(xiàn)的可以讓div慢慢上升效果實(shí)現(xiàn)代碼,喜歡的朋友可以參考下2012-10-10
swiper+echarts實(shí)現(xiàn)多個(gè)儀表盤左右滾動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了swiper+echarts實(shí)現(xiàn)多個(gè)儀表盤左右滾動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
JS+CSS實(shí)現(xiàn)簡(jiǎn)單的二級(jí)下拉導(dǎo)航菜單效果
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)簡(jiǎn)單的二級(jí)下拉導(dǎo)航菜單效果,通過簡(jiǎn)單的JavaScript頁(yè)面元素遍歷及樣式操作實(shí)現(xiàn)下拉菜單效果,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-09-09
可以用鼠標(biāo)拖動(dòng)的DIV實(shí)現(xiàn)思路及代碼
DIV可以拖動(dòng)的效果,想必大家都有見到過吧,在本文也為大家實(shí)現(xiàn)一個(gè)不錯(cuò)的可以用鼠標(biāo)拖動(dòng)的div,感興趣的各位不要錯(cuò)過2013-10-10
JavaScript 函數(shù)調(diào)用規(guī)則
2009-09-09
javascript 文字上下間隔滾動(dòng)的代碼 符合WEB標(biāo)準(zhǔn) 腳本之家修正版
javascript 文字上下間隔滾動(dòng)的代碼 符合WEB標(biāo)準(zhǔn) 腳本之家修正版,這里提供了兩個(gè)版本,第二個(gè)在firefox下運(yùn)行有些問題大家可以修改下,第一個(gè)的高度問題,已經(jīng)修正,其實(shí)就是簡(jiǎn)單的加了css樣式。2009-12-12
iframe實(shí)現(xiàn)高度自適應(yīng)小程序web-view方案
這篇文章主要為大家介紹了iframe實(shí)現(xiàn)高度自適應(yīng)小程序web-view方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
uni-app操作數(shù)據(jù)庫(kù)的三種方法總結(jié)
數(shù)據(jù)庫(kù)操作的,可以采用多方案,下面這篇文章主要給大家介紹了關(guān)于uni-app操作數(shù)據(jù)庫(kù)的三種方法,文中通過實(shí)例代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05

