js addEventListener事件捕获与冒泡,第三个参数详解,阻止事件传播

js addEventListener事件捕获与冒泡,第三个参数详解,阻止事件传播结论element.addEventListener(event,function[,useCapture])event:事件名称,如clickfunction:指定要事件触发时执行的函数,可以传入事件参数useCapture:可选。布尔值,指定事件是否在捕获或冒泡阶段执行。默认false:在冒泡阶段执行指定事件true:在捕获阶段执行事件event.stopPropagat…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

结论

element.addEventListener(event, function[, useCapture])

  1. event:事件名称,如click
  2. function:指定要事件触发时执行的函数,可以传入事件参数
  3. useCapture:可选。布尔值,指定事件是否在捕获或冒泡阶段执行。
    默认false:在冒泡阶段执行指定事件
    true:在捕获阶段执行事件

event.stopPropagation():阻止事件传播,用于function(event){}中

图解捕获与冒泡

实例:aa里面有个bb,bb里面有个cc,当点击cc时会发生什么?
angular_lyt

实例代码

<div id="aa">
    aa
    <div id="bb">
      bb
      <div id="cc">cc</div>
    </div>
  </div>

Jetbrains全家桶1年46,售后保障稳定

  function print(e){ 
   
     console.log(this.id);
   }
   aa.addEventListener('click',print);//第三个参数默认为false
   bb.addEventListener('click',print);
   cc.addEventListener('click',print);
div{ 
   
      display: flex;
      align-items: center;
      justify-content: center;
    }
    #aa{ 
   
      margin:100px 0 0 400px;
      background-color: #f0ad4e;
      height:300px;
      width:300px;
    }
    #bb{ 
   
      background-color: #4078c0;
      height:200px;
      width:200px;
    }
    #cc{ 
   
      background-color: #42b983;
      height:100px;
      width:100px;
    }

讲解

  1. 当点击cc时,按cc>bb>aa依次捕获,再按aa>bb>cc依次冒泡;因为第三个参数(useCapture)默认为false,所以在冒泡阶段执行各自click函数,结果如下:
    cc
    bb
    aa
  2. 当js修改为
 function print(e){ 
   
    console.log(this.id);
  }
  aa.addEventListener('click',print,true);//第三个参数默认为false
  bb.addEventListener('click',print,true);
  cc.addEventListener('click',print,true);

再点击cc时,按cc>bb>aa依次捕获,再按aa>bb>cc依次冒泡;因为第三个参数(useCapture)为true,所以在捕获阶段执行各自click函数,结果如下:
aa
bb
cc
3. 当js修改为

 function print(e){ 
   
 	e.stopPropagation();//执行完此函数后,该事件不再继续传播
    console.log(this.id);
  }
  aa.addEventListener('click',print,true);//第三个参数默认为false
  bb.addEventListener('click',print,true);
  cc.addEventListener('click',print,true);

再点击cc时,捕获cc,执行cc的click函数, 因为print函数中有e.stopPropagation(),所以执行完该函数后,click事件不再传播.结果如下:
aa

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234202.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java二维数组试题_Java二维数组及习题总结

    java二维数组试题_Java二维数组及习题总结二维数组二维数组:就是一个由行和列组成的一个矩阵(Matrix);在这个矩阵中访问元素时,是根据元素的行角标和列角标所确定的。二维数组在内存中的存储:无论是二维数组,还是多维数组,它们本身就是一个一维数组,只不过该一维数组中的每一个元素是另一个一维数组。二维数组的创建:int[][]matrix=newint[3][4]———创建一个3行4列的二维数组,元素默认都是0;int[]…

  • C# List去重的三种方法「建议收藏」

    C# List去重的三种方法「建议收藏」三种去重的方法1、List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法。2、使用表达式users.Where((x,i)=>users.FindIndex(z=>z.name==x.name)==i)去重,这条语句是查找users中name等于x.name的第一个元素。经实验,这个方法效率最低。3、使用循环,判断每个元素是否重复

  • 进程间的7种通信方式_linux 进程间通信

    进程间的7种通信方式_linux 进程间通信1无名管道通信无名管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。2高级管道通信高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。3有名管道通信有名管道(namedpipe):有名管道也是半双工的通信方式,但是它允许

    2022年10月11日
  • 独立成分分析(ICA)

    独立成分分析(ICA)1.概念独立成分分析是从多元(多维)统计数据中寻找潜在因子或成分的一种方法.ICA与其它的方法重要的区别在于,它寻找满足统计独立和非高斯的成分。这里我们简要介绍ICA的基本概念、应用和估计原理。1.1 多元数据的线性表示统计数据处理及相关领域中的一个重要和需要长期研究的问题就…

  • 排列汇总

    排列汇总

    2021年12月31日
  • es6的解构赋值_字符串赋值给字符指针

    es6的解构赋值_字符串赋值给字符指针ES6模板字符串与解构赋值

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号