JavaScript事件委托原理
一、什么是事件委托
事件委托也稱(chēng)為事件代理。就是利用事件冒泡,把子元素的事件都綁定到父元素上。如果子元素阻止了事件冒泡,那么委托就無(wú)法實(shí)現(xiàn)。
舉個(gè)簡(jiǎn)單的例子:
例如快遞員有100個(gè)快遞要分別送給100個(gè)學(xué)生, 如果一個(gè)個(gè)的送花費(fèi)時(shí)間較長(zhǎng)。同時(shí)每個(gè)學(xué)生領(lǐng)取的時(shí)候,也需要排隊(duì)領(lǐng)取,也花費(fèi)時(shí)間較長(zhǎng),應(yīng)該怎樣操作呢?這時(shí)快遞員可以把100個(gè)快遞委托給班主任,班主任把這些快遞放到辦公室,同學(xué)們下課自行領(lǐng)取即可。這樣的話(huà),快遞員省事,同學(xué)們領(lǐng)取也更方便。這個(gè)過(guò)程就是一個(gè)委托事件。
二、事件委托的原理
不是每個(gè)子節(jié)點(diǎn)單獨(dú)設(shè)置事件監(jiān)聽(tīng)器,而是事件監(jiān)聽(tīng)器設(shè)置在其父節(jié)點(diǎn)上,然后利用冒泡原理影響設(shè)置每個(gè)子節(jié)點(diǎn)。
我們?cè)賮?lái)看看在具體的程序中是如何實(shí)現(xiàn)的吧!
比如,我們現(xiàn)在有一個(gè)無(wú)序列表,在無(wú)序列表里面有五個(gè)li,我們想要給每個(gè)li添加一個(gè)點(diǎn)擊事件,這個(gè)時(shí)候,我們常規(guī)操作是通過(guò)循環(huán)給每個(gè)li添加點(diǎn)擊事件。
代碼如下所示:
<body>
<ul>
<li>111111</li>
<li>222222</li>
<li>333333</li>
<li>444444</li>
<li>555555</li>
</ul>
<script>
var li = document.querySelectorAll('li');
for(var i=0;i<li.length;i++){
li[i].onclick = function(){
this.style.color = 'green';
}
}
</script>
</body>
運(yùn)行結(jié)果為:

這種方法的確可以實(shí)現(xiàn)我們的點(diǎn)擊操作,但是這個(gè)過(guò)程中,由于每次都要給li添加點(diǎn)擊事件,造成訪問(wèn)DOM的次數(shù)過(guò)多,會(huì)延長(zhǎng)整個(gè)頁(yè)面的交互就緒時(shí)間。
所以,這里,我們就可以用到事件委托,即給ul注冊(cè)點(diǎn)擊事件,然后利用事件對(duì)象的 target 來(lái)找到當(dāng)前點(diǎn)擊的 li,因?yàn)辄c(diǎn)擊li,事件會(huì)冒泡到ul上,ul有注冊(cè)事件,就會(huì)觸發(fā)事件監(jiān)聽(tīng)器。
實(shí)現(xiàn)代碼為:
<script>
var ul = document.querySelector('ul');
ul.addEventListener('click',function(e){
e.target.style.color = 'orange';
})
</script>
運(yùn)行結(jié)果為:

成功顯示。
三、事件委托的作用
通過(guò)上面的操作,我們可以得到:在事件委托中,我們只操作一次 DOM ,大大的提高了程序的性能。
到此這篇關(guān)于JavaScript事件委托原理的文章就介紹到這了,更多相關(guān)JavaScript事件委托內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Electron學(xué)習(xí)應(yīng)用程序打包實(shí)例詳解
這篇文章主要介紹了Electron學(xué)習(xí)應(yīng)用程序打包實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
微信小程序 textarea 組件詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了微信小程序 textarea 組件詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-01-01
JavaScript設(shè)計(jì)模式之單例模式應(yīng)用場(chǎng)景案例詳解
這篇文章主要為大家介紹了JavaScript中單例模式的應(yīng)用場(chǎng)景案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
微信小程序 wxapp內(nèi)容組件 icon詳細(xì)介紹
這篇文章主要介紹了微信小程序 wxapp內(nèi)容組件 icon詳細(xì)介紹的相關(guān)資料,并附簡(jiǎn)單實(shí)例,需要的朋友可以參考下2016-10-10
微信小程序 wxapp導(dǎo)航 navigator詳解
這篇文章主要介紹了微信小程序 wxapp導(dǎo)航 navigator詳解的相關(guān)資料,并附簡(jiǎn)單實(shí)例代碼,需要的朋友可以參考下2016-10-10
js題解LeetCode1051 高度檢查器哈希表對(duì)比
這篇文章主要為大家介紹了JS題解LeetCode1051 高度檢查器哈希表對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12

