1. 程式人生 > >原生JS實現事件委託

原生JS實現事件委託

什麼是事件委託?

它還有一個名字叫事件代理,JavaScript高階程式設計上講:事件委託就是利用事件冒泡,只指定一個事件處理程式,就可以管理某一型別的所有事件。

舉個栗子:
有三個同事預計會在週一收到快遞。為簽收快遞,有兩種辦法:一是三個人在公司門口等快遞;二是委託給前臺MM代為簽收。前臺MM收到快遞後,她會判斷收件人是誰,然後按照收件人的要求籤收,甚至代為付款。這種方案還有一個優勢,那就是即使公司裡來了新員工(不管多少),前臺MM也會在收到寄給新員工的快遞後核實並代為簽收。

這裡其實還有2層意思的:

第一,現在委託前臺的同事是可以代為簽收的,即程式中的現有的dom節點是有事件的;

第二,新員工也是可以被前臺MM代為簽收的,即程式中新新增的dom節點也是有事件的。

HTML程式碼:

<ul id="ul">
        <li>0</li>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
    <button id="btn">點我新增一個li</button
>

JS程式碼:

// 事件委託具體實現
var ul = document.getElementById("ul");
    ul.onclick = function (event) {
        event = event || window.event;
        var target = event.target;
        // 獲取目標元素
        if (target.nodeName == 'LI') {
            alert(target.innerHTML);
        }
    }
    // 為按鈕繫結點選事件
    var
btn = document.getElementById('btn'); btn.onclick = function () { var li = document.createElement('li'); // 新增li的內容為ul當前子元素的個數 li.textContent = ul.children.length; ul.appendChild(li); }