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

说一下事件传播机制

1. 概念

事件传播机制指的是事件在 DOM 树中传播的过程,当事件发生在某个元素时,浏览器会按照一定顺序触发对应元素的事件处理函数。

2. 三个阶段

浏览器标准事件传播分为 三个阶段:

阶段说明
捕获阶段(Capturing Phase)事件从 document → 父元素 → 目标元素 依次向下传播,可捕获事件
目标阶段(Target Phase)事件到达 目标元素,先触发目标元素的捕获事件,再触发冒泡事件
冒泡阶段(Bubbling Phase)事件从 目标元素 → 父元素 → document 向上冒泡,触发绑定的冒泡事件

注意:并不是所有事件都支持冒泡,例如 focus、blur 默认不冒泡,但有 focusin/focusout 支持冒泡。

3. addEventListener 的第三个参数

element.addEventListener('click', handler, useCapture);
  • useCapture = true → 捕获阶段触发

  • useCapture = false → 冒泡阶段触发(默认)

示例

<div id="parent"><button id="child">Click me</button>
</div>
const parent = document.getElementById('parent');
const child = document.getElementById('child');// 捕获阶段
parent.addEventListener('click', () => console.log('parent capture'), true);// 冒泡阶段
parent.addEventListener('click', () => console.log('parent bubble'), false);child.addEventListener('click', () => console.log('child bubble'), false);

点击按钮的输出顺序:

parent capture → child bubble → parent bubble

4. stopPropagation 与 stopImmediatePropagation

  • event.stopPropagation()

    • 阻止事件向上或向下传播,但当前元素的其他同类型事件仍会触发
  • event.stopImmediatePropagation()

    • 阻止事件传播,并且阻止当前元素上同类型的其他事件触发

5. 事件委托与传播机制关系

  • 事件委托依赖 冒泡阶段

  • 绑定在父元素的事件会在子元素触发事件后被捕获到

ul.addEventListener('click', e => {console.log(e.target); // 实际触发事件的子元素
});
http://www.xdnf.cn/news/1319023.html

相关文章:

  • Python注解
  • Python入门第7课:异常处理机制:让你的程序更健壮(try-except详解)
  • 配置 NVIDIA RTX 5090 + sm_120 + flashattention,已跑通一个大模型 ~~
  • C语言(12)——进阶函数
  • Day3--滑动窗口与双指针--2461. 长度为 K 子数组中的最大和,1423. 可获得的最大点数,1052. 爱生气的书店老板
  • 数字货币的法律属性与监管完善路径探析
  • 实变函数中集合E的边界与其补集的边界是否相等
  • Android中使用Compose实现各种样式Dialog
  • Dify 从入门到精通(第 40/100 篇):Dify 的企业级权限管理
  • Mutually aided uncertainty
  • Windchill 11.0使用枚举类型自定义实用程序实现生命周期状态管理
  • Makefile介绍(Makefile教程)(C/C++编译构建、自动化构建工具)
  • 计算机网络 TCP、UDP 区别
  • 从需求到部署全套方案:餐饮服务许可证数据可视化分析系统的大数据技术实战
  • Bee1.17.25更新Bug,完善功能.不支持NOSQL,分库分表Sharding(2.X版有)
  • C语言网络编程TCP通信实战:客户端↔服务器双向键盘互动全流程解析
  • 模拟实现 useEffect 功能
  • 【R语言】R 语言中打印含有双引号的字符串时会出现 “\” 的原因解析
  • 基于STM32单片机智能RFID刷卡汽车位锁桩设计
  • 基于51单片机汽车自动照明灯超声波光敏远近光灯设计
  • 自由学习记录(85)
  • TensorRT-LLM.V1.1.0rc0:在无 GitHub 访问权限的服务器上编译 TensorRT-LLM 的完整实践
  • 计算机网络 TCP time_wait 状态 详解
  • Java开发MCP服务器
  • thingsboard 服务器在2核CPU、2G内存资源配置下如何调优提速,适合开发/演示
  • vue封装请求拦截器 响应拦截器
  • 计算机网络 Session 劫持 原理和防御措施
  • 给纯小白的Python操作 PDF 笔记
  • 【算法】模拟专题
  • nertctl使用了解