JavaScript中事件冒泡与事件捕获机制_javascript技巧

夜晨

夜晨

2025-10-30

263人浏览

原创

事件传播分捕获、目标、冒泡三阶段;默认在冒泡阶段执行,通过addeventlistener第三参数可设为捕获;使用stoppropagation可阻止传播,实现精确事件控制。

javascript中事件冒泡与事件捕获机制_javascript技巧

在JavaScript中,事件冒泡事件捕获是DOM事件传播的两种机制。理解它们对开发交互式网页至关重要,尤其是在处理嵌套元素的事件时。

事件传播的三个阶段

当一个事件(如点击)发生在某个DOM元素上时,它并不会立即触发该元素的事件处理程序,而是经历三个阶段:

  • 捕获阶段(Capture Phase):事件从window对象向下传递,经过document、html、body,直到目标元素的父级。
  • 目标阶段(Target Phase):事件到达绑定事件的目标元素本身。
  • 冒泡阶段(Bubbling Phase):事件从目标元素逐级向上传播回window对象。

大多数开发者只熟悉冒泡阶段,因为默认情况下事件监听器在冒泡阶段执行。

事件冒泡(Event Bubbling)

事件冒泡是指事件先由最具体的元素接收,然后逐级向上传播至最不具体的节点(如document或window)。

例如:

假设HTML结构如下:

<div id="outer">
  <div id="inner">点击我</div>
</div>

JavaScript代码:

document.getElementById('outer').addEventListener('click', function() {
  console.log('外层div被点击');
});
document.getElementById('inner').addEventListener('click', function() {
  console.log('内层div被点击');
});

当你点击“内层div”时,输出顺序为:

  • 内层div被点击
  • 外层div被点击

这就是冒泡:事件从inner传播到outer。

讯飞听见 Win
讯飞听见 Win

PHP中文网为您提供讯飞听见Windows客户端官方下载与安装部署指南。作为科大讯飞旗下的智慧办公SaaS平台,我们为您整理了通过官方渠道安全获取最新完整版安装包(支持Win7至Win11系统)的核心入口。同时,详细梳理了客户端的核心功能与使用技巧,涵盖实时录音转文字、音视频文件批量导入转写、AI智能会议纪要生成、多语种实时翻译及屏幕录制等。

下载

事件捕获(Event Capturing)

事件捕获与冒泡相反:事件从最不具体的节点(window)开始,逐级向下传递,直到目标元素。

要启用捕获模式,在addEventListener中将第三个参数设为true:

document.getElementById('outer').addEventListener('click', function() {
  console.log('捕获阶段:外层div');
}, true);

document.getElementById('inner').addEventListener('click', function() {
  console.log('目标阶段:内层div');
}, false);

此时点击inner,输出为:

  • 捕获阶段:外层div
  • 目标阶段:内层div

外层div的事件在捕获阶段触发,inner仍在冒泡阶段执行(因设为false)。

如何阻止事件传播

有时你不希望事件继续传播,可以使用以下方法:

  • event.stopPropagation():阻止事件继续在当前阶段传播(无论是捕获还是冒泡)。
  • event.stopImmediatePropagation():除了阻止传播,还阻止当前元素上其他同类型事件处理函数的执行。

示例:

document.getElementById('inner').addEventListener('click', function(e) {
  e.stopPropagation();
  console.log('内层div,但阻止冒泡');
});

document.getElementById('outer').addEventListener('click', function() {
  console.log('外层div');
});

此时点击inner,只会输出“内层div,但阻止冒泡”,外层不会响应。

基本上就这些。掌握事件冒泡和捕获,能帮助你更精准地控制事件行为,避免意外触发,也能实现事件委托等高级技巧。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

2024.08.14

6230

7

火山引擎API接入教程
火山引擎API接入教程

火山引擎API接入适合需要在应用、脚本、后台服务或AI工具中调用火山引擎能力的开发者参考。本专题整理控制台入口、服务开通、API Key获取、接口地址配置、请求参数填写、调用测试、权限设置、额度查询和常见接口报错排查。

2026.08.04

0

10

火山引擎DeepSeek API调用教程
火山引擎DeepSeek API调用教程

火山引擎DeepSeek API适合需要在应用、脚本、智能体或AI编程工具中调用DeepSeek模型的开发者参考。本专题整理火山引擎控制台入口、模型服务开通、API Key获取、Base URL配置、模型名称填写、调用测试、额度查询和常见接口报错排查。

2026.08.04

0

10

火山引擎控制台操作教程
火山引擎控制台操作教程

火山引擎控制台中常用功能包括API密钥管理、模型调用配置、云资源查看、账单明细、用量统计和权限分配。本专题整理控制台基础操作、服务开通流程、Key创建与保存、费用消耗查看、子账号权限设置和调用失败排查,方便开发者完成日常管理。

2026.08.04

0

10

PDF与PPT格式转换操作方法及在线转换技巧
PDF与PPT格式转换操作方法及在线转换技巧

本专题聚焦 PDF 与 PPT 文件格式转换需求,整理 PDF 转 PPT 在线转换方法、PPT 批量转换 PDF 操作步骤、转换后格式错乱处理以及文档版式检查技巧。通过详细教程帮助用户掌握 PDF、PPT 双向转换方法,解决演示文稿制作、文件整理和办公格式转换中的常见问题,提高办公效率。

2026.07.31

112

6

PDF合并文件操作方法与在线批量合并技巧
PDF合并文件操作方法与在线批量合并技巧

本专题聚焦 PDF 文件合并与文档整理需求,整理多个 PDF 合并成一个文件、图片批量转换 PDF、合同附件合并发送以及在线 PDF 合并操作方法等实用教程。通过详细步骤介绍 PDF 合并流程、文件顺序检查技巧和免费在线合并方案,帮助用户快速整理零散文档,提高办公文件处理效率。

2026.07.31

86

8

PDF转Word在线转换与文档编辑处理方法
PDF转Word在线转换与文档编辑处理方法

本专题聚焦 PDF 转 Word 文件转换与办公文档处理需求,整理 PDF 在线转换成 Word、PDF 转可编辑 Word、PDF 文件格式转换操作步骤以及转换后版式错乱、图片无法编辑等常见问题解决方法。通过详细教程帮助用户快速掌握 PDF 转 Word 技巧,提高办公文件处理效率。

2026.07.31

87

5

CodeIgniter下载教程
CodeIgniter下载教程

本合集由PHP中文网精心整理,为您提供CodeIgniter下载教程与官方正版下载安装指南。内容涵盖CI3/CI4官方获取渠道、Composer依赖安装及环境配置全流程。助您安全、高效地搭建轻量级PHP框架,轻松开启Web应用开发之旅。

2026.07.30

116

10

CodeIgniter数据库配置指南
CodeIgniter数据库配置指南

PHP中文网为您提供CodeIgniter数据库配置指南合集。本专题全面解析CI框架数据配置方法,涵盖配置文件修改、多环境连接、动态切换数据库及常见连接错误排查等实战技巧。内容详实易懂,助您轻松掌握CodeIgniter数据库配置,快速解决开发难题,提升项目构建效率。

2026.07.30

44

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 11.1万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.1万人学习