当前位置: 首页 > news >正文

DOM--事件响应链(冒泡目标捕获)

文章目录

    • 4、事件响应链(冒泡目标捕获)
        • 1、事件的三个阶段:
        • 2、阻止冒泡
            • 易错:
            • 面试中的坑:

4、事件响应链(冒泡目标捕获)

如图所示:

在这里插入图片描述

1、事件的三个阶段:

  • 先捕获==>后目标==>再冒泡,只能有一个阶段触发程序执行,比如捕获阶段触发了到了冒泡阶段就不再触发。
  • 事件如果经过所有元素都没有被处理,那么这个事件会消失。
  • 事件传递的过程 只跟文档树的结构有关系 跟界面显示的层叠效果没有任何关系。

事件冒泡:结构上(非视觉上)嵌套关系的元素,会存在事件冒泡的功能,即同一事件,自子元素冒泡向父元素。(自底向上)

事件捕获:结构上(非视觉上)嵌套关系的元素,会存在事件捕获的功能,即同一事件,自父元素捕获至子元素(事件源元素)。(自顶向下)与事件冒泡是反过来的。

2.addEventListener绑定事件,中的第三个参数:

如果设置为true,则在捕捉的时候执行事件

如果设置为false则是在冒泡时触发执行事件。

大部分默认冒泡时触发。

2、阻止冒泡

1、阻止事件冒泡:

  • W3C标准 event.stopPropagation();

    但不支持 ie9以下版本。

  • stopImmediatePropagation()
    支持stopPropagation的浏览器中也可以用。

  • stopImmediatePropagation( )方法,这个不仅会阻止事件向祖元素的冒泡,也会阻止同一个节点上同一事件的其他的事件处理程序 (优先级比它低的,同元素同事件多处理程序时)。

  • event.cancelBubble=true; ie8及ie8以下可用。

2、阻止默认事件:

  • 默认事件——表单提交,a标签跳转,右键菜单等等

  • return false; 以对象属性的方式注册的事件才生效,用addEventListener/attachEvent这种是不生效的。

  • event.preventDefault(); W3C标准,IE9以下不兼容。

  • event.returnValue=false;兼容IE。

易错:

阻止冒泡,设计让监听器在捕获阶段运行 等等,都是指的同一个事件。如 :点击和鼠标移动是不同的点击事件和滑动事件是两条链。他们之间并不会绑定相互影响,而是独立的。

面试中的坑:

问:addEventListener的第三个参数为true是阻止事件传递还是false?

答:都不阻止,都不会阻止事件传递。要阻止事件传递,唯一的方式就是阻止事件冒泡:事件对象调用stopPropagation()这个函数。

相关文章:

  • 测试人生 | 做了低薪运营6年,妹纸靠什么转行拿下 20W 年薪?
  • 获取Optimism 代币OP的五种方式
  • bugku misc disordered_zip
  • JVM面试常考的4个问题详解
  • 画画用电容笔还是触控笔?电容笔10大品牌排行榜
  • 企业选择快鲸开源scrm系统的7大理由
  • 中国出口商对人民币波动持乐观态度!贬值“不会继续”!
  • Spring5总结
  • 虚拟内存地址和物理内存地址?为什么我们程序里地址连续?为什么需要TLB Translation lookaside buffer
  • js高级属性
  • ISP和IAP介绍
  • 基于R语言、MATLAB、Python机器学习方法与案例分析
  • 基于php+MYSQL的旅游景点攻略的设计与实现毕业设计源码301216
  • 猿创征文|【Typescript入门】常用数据类型(2)
  • 上新啦!腾讯云云原生数据湖产品DLC 2.2.5版本发布,来看特性详解!
  • [译] React v16.8: 含有Hooks的版本
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • js写一个简单的选项卡
  • MYSQL 的 IF 函数
  • Promise面试题2实现异步串行执行
  • Python 基础起步 (十) 什么叫函数?
  • Python连接Oracle
  • React Native移动开发实战-3-实现页面间的数据传递
  • SQLServer之创建数据库快照
  • tweak 支持第三方库
  • Vue学习第二天
  • 翻译--Thinking in React
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 将 Measurements 和 Units 应用到物理学
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 【干货分享】dos命令大全
  • puppet连载22:define用法
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #include到底该写在哪
  • (¥1011)-(一千零一拾一元整)输出
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (3)llvm ir转换过程
  • (接口自动化)Python3操作MySQL数据库
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (循环依赖问题)学习spring的第九天
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)IOS中获取各种文件的目录路径的方法
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NetCore项目nginx发布
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net下的富文本编辑器FCKeditor的配置方法
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • 。Net下Windows服务程序开发疑惑
  • [20170713] 无法访问SQL Server
  • [Android]Tool-Systrace
  • [android学习笔记]学习jni编程
  • [Angular] 笔记 21:@ViewChild