addEventListener(type, fn , true/false)绑定事件第三个参数作用以及利用事件的冒泡,实现事件委托

(一):

第一个参数type,事件的类型,如click,mouseover等;

fn,事件监听执行的function;

第三参数,决定事件执行的过程(大概这样解释。。),捕获或者冒泡,首先我们看一张图片:

这里写图片描述

由图片我们可以看到,事件是先捕获再冒泡的,而第三个参数就决定了是先捕获还是先冒泡,如果是true就是捕获,反正则是冒泡,我们可以看个例子:

html:

<ul id="ul">
    <li>1111</li>
    <li>2222</li>
    <li>3333</li>
    <li>4444</li>
</ul>

javascript:

 var ul = document.querySelector('#ul');
 ul.addEventListener('click' ,function () {
     alert('ul')
 },false);

 var li = document.querySelector('#ul > li');
 li.addEventListener('click' ,function () {
     alert('li')
 },true)

上面的例子中,把 li 事件监听的执行过程是捕获,而捕获先于冒泡执行,所以是先alert(‘’li“)再
alert(‘’ul“), 但是如果我们这样改一下:

var ul = document.querySelector('#ul');
ul.addEventListener('click' ,function () {
     alert('ul')
 },true);

var li = document.querySelector('#ul > li');
li.addEventListener('click' ,function () {
    alert('li')
},true)

那么结果就是先alert(‘’ul“)再alert(‘’li“)了。

(二):

还是上面那个例子如果我们想要实现点 li 绑定事件,例如点击改变背景,正常情况下我们可能是这样写代码:

var li = document.querySelectorAll('#ul > li') ;
for ( var i = 0 ; i < li.length ; i++ ){
     li[i].index = i;
     li[i].onclick = function () {
         this.style.background = 'red';
     }
 }

当然这样也是没有什么问题的,但是如果 li 非常多,那么利用事件冒泡就会方便很多,实现方法就是在 li 的父元素上绑定事件:

 var ul = document.querySelector('#ul');
 ul.addEventListener('click' ,function (e) {

      var ev = e || event ;
      var li = ev.target;
      li.style.background = 'blue';
      console.log(ev.currentTarget);//事件监听的对象,ul
 },false);

类似与jquery的事件委托:

$('#ul').on('click' , 'li' , function(){

    $(this).css('background' , 'blue');
})
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值