新闻中心

J*aScript中事件冒泡与事件捕获机制_j*ascript技巧

2025-10-30
浏览次数:
返回列表
事件传播分捕获、目标、冒泡三阶段;默认在冒泡阶段执行,通过addEventListener第三参数可设为捕获;使用stopPropagation可阻止传播,实现精确事件控制。

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

在J*aScript中,事件冒泡和事件捕获是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>

J*aScript代码:

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

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

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

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

件捕获(Event Capturing)

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

万相营造 万相营造

阿里妈妈推出的AI电商营销工具

万相营造 168 查看详情 万相营造

要启用捕获模式,在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,但阻止冒泡”,外层不会响应。

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

以上就是J*aScript中事件冒泡与事件捕获机制_j*ascript技巧的详细内容,更多请关注其它相关文章!


# 更受欢迎  # 启用gzip压缩前端seo优化  # 基因优化网站有哪些  # 茂名网站建设优势有哪些  # 西安视频seo  # seo如何搞灰色流量  # 义乌导航网站建设招标  # 开封天眼关键词排名系统  # 河南各大营销推广方式  # 桂城杏坛网站建设  # 烟台网站优化教程电话  # 这就是  # 有哪些  # javascript  # 是在  # 它比  # 三个阶段  # 最不  # 如何使用  # 怎么做  # 设为  # 事件捕获  # win  # 事件冒泡  # html  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】  妖精动漫免费平台 妖精动漫官网资源观看网址  抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧  随机参数递归函数的基准调用次数与时间复杂度探究  mc.js免安装版 mc.js一键畅玩入口  Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突  优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题  Shopware订单对象中获取产品自定义字段的正确方法  Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换  小米汽车11月交付量突破40000台!雷军:将继续努力  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  Win11怎么开启省电模式_Win11电池节电模式自动开启  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  Lar*el 递归关系中排除指定分支的教程  将HTML动态表格多行数据保存到Google Sheet的教程  高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法  J*aScript实现动态背景色下的文本与按钮颜色自适应调整  qq游戏大厅官方下载_qq游戏免费下载安装入口  CSS子选择器:如何区分并样式化嵌套列表的子层级  J*aScript设计模式实践_j*ascript代码优化  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址  漫蛙网页登录入口 漫蛙漫画官方授权网址  魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】  Go语言中Map存储的结构体如何调用指针方法:深入解析与实践  快手网页版在线登录 快手网页版官网入口快速访问  UC浏览器官网入口2025最新 UC浏览器网页版正式地址  MAC的“快捷指令”怎么同步到iPhone_MAC利用iCloud同步所有设备的自动化指令  晋江读书网页版在线登录 晋江读书电脑版官网  印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】  LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置  12306几点到几点不能订票? | 官方最新系统维护时间全解析  sublime怎么格式化代码_sublime代码美化与一键排版插件配置  QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口  Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】  TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法  Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录  MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用  React项目中导航栏Logo自适应布局:避免裁剪与布局溢出  照顾宝贝2小游戏点击立即在线玩  C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程  lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案  C++如何操作注册表_Windows平台下C++读写注册表的API函数详解  初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解  在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全  qq游戏手机版下载安装_qq游戏移动端入口 

搜索