jQuery 事件委托

事件委托是通過事件冒泡的原理,利用父級去觸發(fā)子級的事件。

如下html,如果不用事件委托,將每一個(gè)li都去添加click事件監(jiān)聽,非常麻煩。

另外就是如果通過js動態(tài)創(chuàng)建的子節(jié)點(diǎn),需要重新綁定事件。

而利用事件委托的話,只需要給父級綁定一個(gè)事件監(jiān)聽,即可讓每個(gè)li都綁定上相應(yīng)的事件。

html

<ul id="wrap">
    <li>item1</li>
    <li>item2</li>
    <li>item3</li>
    <li>item4</li>
    <li>item5</li>
</ul>

js

$(function(){

    // 普通事件
    $('li').click(function(){
        $(this).css('background', '#D4DFE6');
    });
      

    // 動態(tài)添加DOM節(jié)點(diǎn)
    $('#addBtn').click(function(){
        $('#wrap').append( $('<li>item'+ ($('li').length + 1) +'</li>') );
    });

    /**
     * 事件委托
     */

    // jQuery 1.9已廢棄
    /*$('li').live('click', function(){
        $(this).css('background', '#D4DFE6');
    });*/

    // jQuery的delegate寫法
    $('#wrap').delegate('li', 'click', function(ev){

        // this 指向委托的對象 li
        $(this).css('background', '#D4DFE6');

        // 找到父級 ul#wrap
        $(ev.delegateTarget).css('border', '2px solid #f00');
    });

    // jQuery的on的寫法
    $('#wrap').on('click', 'li', function(ev) {
        // this 指向委托的對象 li
        $(this).css('background', '#D4DFE6');

        // 找到父級 ul#wrap
        $(ev.delegateTarget).css('border', '2px solid #f00');
    })


    // js原生寫法
    var _wrap = document.getElementById('wrap');
    _wrap.addEventListener('click', function(ev){
        var ev = ev || event;
        if( ev.target.nodeName == 'LI' ) {
            ev.target.style.background = '#8EC0E4';
            console.log( ev.target.innerHTML );
        }

        // 找到父級 ul#wrap
        this.style.border = '2px solid #f00';
    });

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

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

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