事件委托
(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
后续添加的节点能够直接拥有事件行为事件