JS中的事件委托机制

简要介绍:基于JS的事件冒泡,可以以JS事件委托的方式,在父元素上,给父元素的子元素绑定事件,同时减少事件绑定的时间复杂度。

1.传统的事件监听

HTML结构:

<ul id="ul">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>

JS:

window.onload=function(){
    var myUl=document.getElementById('ul');
    var list=myUl.getElementsByTagName('li');
    for(var i=0;i<list.length;i++){
      list[i].addEventListener('click',function(){
        this.style.backgroundColor="black";
      });
    }
  }

我们需要在ul的子元素上绑定事件,这里有一个for循环,循环遍历每一个li,在每一个li上绑定事件。
改li上事件功能很简单,就是点击li时,切换背景颜色。

2.通过事件委托实现事件监听

HTML:

<ul id="ul">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>

JS:

window.onload=function(){
   var myUl=document.getElementById('ul');
   myUl.addEventListener('click',function(ev){
     var ev= ev||window.ev;
     if(ev.target.nodeName.toLocaleLowerCase()=='li'){
        ev.target.style.backgroundColor="black";
     }
   });
 }

这就是简单的事件委托,在这个例子中,我们并没有直接在li上绑定事件,而是在li的父元素ul上,绑定了事件,因为ul上的事件,是通过事件冒泡,由li传递到ul,事件的冒泡顺序为:

li——>ul

因此,这里的ul点击事件的ev.target指向的是ul的子元素li。这样我们就简介的在通过ul上绑定事件,不需要遍历li,就能通过事件冒泡机制,在li上绑定事件。

3.事件委托的优点

(1)绑定同类子元素时,不需要循环绑定事件。

(2)动态添加了相同类型的子元素,如果是采用事件委托,新元素也可以被相同的事件监听到,而采用传

统的事件绑定,则新元素上并没有添加相同事件的监听。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值