15.JavaScript事件委托

15.1 問題

ul>li*1000

假如我們要對(duì)li的點(diǎn)擊事件進(jìn)行處理,通常情況下我們會(huì)這么寫:

$(function(){
    $('li').click(function(e){
        console.log($(this).index()); // 輸出當(dāng)前下標(biāo)
    })
});

但是這里li有1000個(gè),每個(gè)li都做點(diǎn)擊事件綁定,性能上是很消耗的。

這時(shí)事件委托就派上用場(chǎng)了。我們可以把監(jiān)聽處理轉(zhuǎn)移ul上,當(dāng)對(duì)li進(jìn)行點(diǎn)擊的時(shí)候,點(diǎn)擊事件會(huì)傳遞到ul上并觸發(fā)事件。這時(shí)候我們可以通過事件的target屬性獲取到真正點(diǎn)擊的元素,并進(jìn)行處理。

$(function(){
    $('ul').click(function(e){
        if(e.target.nodeName == 'LI') {
            console.log($(e.target).index()); // 輸出當(dāng)前下標(biāo)
        }
    })
});

15.2 其他使用場(chǎng)景

事件委托,除了上面提到的避免對(duì)數(shù)量龐大的重復(fù)節(jié)點(diǎn)進(jìn)行事件從而減少性能消耗外,還有一個(gè)很實(shí)用的使用場(chǎng)景就是:避免對(duì)新添加的節(jié)點(diǎn)進(jìn)行重復(fù)的事件綁定。

這樣,我們就可以再添加新節(jié)點(diǎn)的時(shí)候,不需要再考慮單獨(dú)為新添加的節(jié)點(diǎn)進(jìn)行事件綁定,從而減少冗余的而不必要的工作量。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style type="text/css">
        ul li {
            margin: 5px;
            background-color: #7B68EE;
        }
    </style>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script>
        $(function(){ 
            $('ul').click(function(e){
                if(e.target.nodeName == 'LI') {
                    $('ul').append( $('<li>/'));
                }
            })
        }); 
    </script>
</head>
<body>
    <ul>
        <li></li>
        <li></li>
    </ul>
</body>
</html>

15.3 jQuery的delegate函數(shù)

上面的實(shí)現(xiàn),我們也可以使用jQuery封裝的事件委托函數(shù)delegate,寫法如下:

$(function(){           
    $('ul').delegate('li', 'click', function(){
        $('ul').append( $('<li>/'));
    });
}); 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,511評(píng)論 0 8
  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,719評(píng)論 2 10
  • 鏈接地址:http://www.cnblogs.com/liugang-vip/p/5616484.htmlhtt...
    青春前行閱讀 865評(píng)論 0 0
  • 一直以來(lái),對(duì)js的一些概念還是不清晰的,很多都沒有搞明白,今天無(wú)意間在群里見他們提起事件委托,所以查找了一些資料,...
    蝴蝶結(jié)199007閱讀 325評(píng)論 1 3
  • 前幾日看見簡(jiǎn)書里描寫了一段關(guān)于奈良里的鹿,恰好近期是櫻花盛開的季節(jié),于是想說有了關(guān)于這兩樣事物的一些想法,或許會(huì)有...
    陳鏡閱讀 686評(píng)論 4 7

友情鏈接更多精彩內(nèi)容