js中的事件委托

事件委托(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事件的,,这是很是糟糕的事情.性能

  1. 事件委托写法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';
    }
};

使用事件委托这种写法,有效的解决了上面那种写法产生的问题.代理

总结

  1. 提升性能(事件委托中并无使用循环)code

  2. 后续添加的节点能够直接拥有事件行为事件

相关文章
相关标签/搜索