原生JS實現事件委託
阿新 • • 發佈:2018-11-12
什麼是事件委託?
它還有一個名字叫事件代理,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);
}