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

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

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

(0)
上一篇 2025年6月9日 下午5:22
下一篇 2025年6月9日 下午6:01


相关推荐

  • QGIS 3.0 使用教程

    QGIS 3.0 使用教程网易云课堂:https://study.163.com/course/courseMain.htm?courseId=1005249002&utm_campaign=commission&utm_source=cp-400000000343054&utm_medium=share课程中所需要的数据和地图服务地址从这里下载:链接:https://pan…

    2022年6月16日
    34
  • PIC 指令周期_三菱plc分钟计时指令

    PIC 指令周期_三菱plc分钟计时指令一、PIC指令周期计算:设工作频率为:F(MHz);1个指令周期为1/(F/4)秒。二、PIC的指令 即汇编指令,不同系列指令数不一样。  8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容

    2022年10月9日
    5
  • 为什么从Java开发转测试?

    为什么从Java开发转测试?前言很多粉丝关注我可能是从乐优商城项目关注的,这确实是我曝光度最高的一篇blog了包括现在新增的粉丝的话也是从乐优商城项目blog关注的ps:大家有询问我要源码,我以前是有上传到github上的,但是由于里面用到了阿里云,github天天给我发邮件报警说有风险,然后我就删除了,所以源码的话,现在是没有了的但是我觉得乐优商城过于大,用的技术栈也很多,如果面试的时候不能充分讲明白的话,尽量不要用这个项目去面试大家如果要用他面试的话可以从以下几个思路去讲1、整体是一个什么项目?主体业务流程是什么

    2022年7月16日
    16
  • AI经典案例_北京航空航天大学高小鹏

    AI经典案例_北京航空航天大学高小鹏来源:新智元本文约8000字,建议阅读10分钟本次报告评估了2016年至2021年间人工智能的发展,涵盖14大问题,探讨了人工智能发展的关键领域。时隔5年,由斯坦福大学教授李飞飞主导…

    2026年4月18日
    8
  • 如何在MAC机器中实现移动设备WiFI上网(没有专门的无线路由器的情况)

    如何在MAC机器中实现移动设备WiFI上网(没有专门的无线路由器的情况)

    2021年8月22日
    53
  • 火遍全网的“小龙虾”,居然是这样诞生的!

    火遍全网的“小龙虾”,居然是这样诞生的!

    2026年3月15日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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