溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript事件委托原理是什么

發(fā)布時(shí)間:2021-12-07 09:45:03 來源:億速云 閱讀:119 作者:柒染 欄目:開發(fā)技術(shù)

JavaScript事件委托原理是什么,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

一、什么是事件委托

事件委托也稱為事件代理。就是利用事件冒泡,把子元素的事件都綁定到父元素上。如果子元素阻止了事件冒泡,那么委托就無法實(shí)現(xiàn)。

舉個(gè)簡單的例子:

例如快遞員有100個(gè)快遞要分別送給100個(gè)學(xué)生, 如果一個(gè)個(gè)的送花費(fèi)時(shí)間較長。同時(shí)每個(gè)學(xué)生領(lǐng)取的時(shí)候,也需要排隊(duì)領(lǐng)取,也花費(fèi)時(shí)間較長,應(yīng)該怎樣操作呢?這時(shí)快遞員可以把100個(gè)快遞委托給班主任,班主任把這些快遞放到辦公室,同學(xué)們下課自行領(lǐng)取即可。這樣的話,快遞員省事,同學(xué)們領(lǐng)取也更方便。這個(gè)過程就是一個(gè)委托事件。

二、事件委托的原理

不是每個(gè)子節(jié)點(diǎn)單獨(dú)設(shè)置事件監(jiān)聽器,而是事件監(jiān)聽器設(shè)置在其父節(jié)點(diǎn)上,然后利用冒泡原理影響設(shè)置每個(gè)子節(jié)點(diǎn)。

我們?cè)賮砜纯丛诰唧w的程序中是如何實(shí)現(xiàn)的吧!
比如,我們現(xiàn)在有一個(gè)無序列表,在無序列表里面有五個(gè)li,我們想要給每個(gè)li添加一個(gè)點(diǎn)擊事件,這個(gè)時(shí)候,我們常規(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é)果為:

JavaScript事件委托原理是什么

這種方法的確可以實(shí)現(xiàn)我們的點(diǎn)擊操作,但是這個(gè)過程中,由于每次都要給li添加點(diǎn)擊事件,造成訪問DOM的次數(shù)過多,會(huì)延長整個(gè)頁面的交互就緒時(shí)間。

所以,這里,我們就可以用到事件委托,即給ul注冊(cè)點(diǎn)擊事件,然后利用事件對(duì)象的 target 來找到當(dāng)前點(diǎn)擊的 li,因?yàn)辄c(diǎn)擊li,事件會(huì)冒泡到ul上,ul有注冊(cè)事件,就會(huì)觸發(fā)事件監(jiān)聽器。

實(shí)現(xiàn)代碼為:

<script>
        var ul = document.querySelector('ul');
        ul.addEventListener('click',function(e){
            e.target.style.color = 'orange';
        })
    </script>

運(yùn)行結(jié)果為:

JavaScript事件委托原理是什么

成功顯示。

三、事件委托的作用

通過上面的操作,我們可以得到:在事件委托中,我們只操作一次 DOM ,大大的提高了程序的性能。

關(guān)于JavaScript事件委托原理是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI