事件委託
(event delegation
)應該也是JS中比較火的一項技術.使用事件委託技術
能避免對特定的每一個節點添加事件監聽,相反,事件監聽器是被添加在他們的父元素上.javascript
事件委託
事件委託
也稱事件代理,不是自身元素觸發的事件而是利用其餘元素來觸發事件實現效果.利用冒泡
來實現.java
<ul id="ul1"> <li>11111</li> <li>11111</li> <li>11111</li> <li>11111</li> <li>11111</li> </ul>
通常狀況下,咱們爲li
綁定onclick
事件,以下:node
var oUl = document.getElementById('ul1'); var aLi = document.getElementsByTagName('li'); for(var i=0;i<aLi.length;i++){ aLi[i].onclick = function(){ this.style.background = 'red'; };
可是這種狀況有個很差處,就是當咱們向ul
中動態添加li
節點時,添加後的li
是沒有onclick
事件的,,這是很是糟糕的事情.性能
事件委託寫法this
var oUl = document.getElementById('ul1'); oUl.onclick = function(ev){ var ev = ev || window.event; var target = ev.target || ev.srcElement; // 事件源 if(target.nodeName.toLowerCase() == 'li' ){ target.style.background = 'red'; } };
使用事件委託
這種寫法,有效的解決了上面那種寫法產生的問題.代理
提升性能(事件委託
中並無使用循環)code
後續添加的節點能夠直接擁有事件行爲事件