如何监听javascript事件_事件冒泡和捕获是什么【教程】
发布时间 - 2026-01-24 00:00:00 点击率:次addEventListener第三个参数填true表示捕获阶段、false表示冒泡阶段;stopPropagation只阻断当前阶段传播,stopImmediatePropagation才彻底中断;事件委托依赖冒泡,需用event.target判断真实触发元素。
JavaScript 事件监听不是“绑了就完事”,冒泡和捕获决定你到底能不能抓到那个点击、输入或键盘事件——不理解这两个阶段,event.stopPropagation() 就像乱按刹车,addEventListener() 的第三个参数就只是个摆设。
addEventListener 的第三个参数到底填 true 还是 false?
这个布尔值控制监听器注册在**捕获阶段**还是**冒泡阶段**。默认是 false(即冒泡阶段),填 true 才进捕获阶段。
- 冒泡阶段:事件从目
标元素向上逐级触发父元素的监听器(
div > p > span点击时,先span,再p,最后div) - 捕获阶段:方向相反,从外向内(
div先响应,然后p,最后到span) - 现代写法更推荐用对象代替布尔值:
{ capture: true }或{ capture: false, once: true },语义清晰且支持更多选项
为什么 stopPropagation() 有时没用?
因为 event.stopPropagation() 只阻止**当前阶段**的后续传播,不跨阶段。比如你在捕获阶段调用它,冒泡阶段依然会照常发生。
- 如果想彻底中断所有传播,得用
event.stopImmediatePropagation()(还会阻止同一阶段其他同类型监听器) - 注意:它对
document.addEventListener('click', ...)或window级监听器也有效,但不能阻止浏览器默认行为(比如表单提交),那得用event.preventDefault() - 常见误用:在冒泡阶段监听器里调
stopPropagation(),却期望阻止外层捕获阶段已执行过的逻辑——做不到,捕获已经结束了
事件委托靠的是冒泡,但别忘了 target 和 currentTarget 的区别
委托的核心是:把监听器放在父容器,靠事件冒泡上来,再用 event.target 判断真正被点的是谁。但新手常混淆 target 和 currentTarget:
-
event.target:最开始触发事件的那个元素(比如你点的是按钮内部的i标签) -
event.currentTarget:当前监听器绑定的那个元素(比如你绑在ul上,这里就是ul) - 做委托时,要用
event.target.matches('button')或event.target.classList.contains('delete-btn')来精准判断,而不是直接操作event.currentTarget
真正在意事件流向的人,不会只记“冒泡从里往外”,而会打开 Chrome DevTools 的 Elements 面板,勾上 Event Listeners,看每个节点上哪些监听器在捕获、哪些在冒泡——那是唯一不会骗你的现场证据。
# javascript
# java
# 浏览器
# 事件冒泡
# ssl
# ai
# win
# 区别
# 键盘事件
# 表单提交
# 为什么
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
如何为不同团队 ID 动态生成多个独立按钮
Java解压缩zip - 解压缩多个文件或文件夹实例
lovemo网页版地址 lovemo官网手机登录
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
高防服务器:AI智能防御DDoS攻击与数据安全保障
昵图网官方站入口 昵图网素材图库官网入口
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
浅析上传头像示例及其注意事项
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
如何安全更换建站之星模板并保留数据?
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
LinuxCD持续部署教程_自动发布与回滚机制
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
Android Socket接口实现即时通讯实例代码
jQuery validate插件功能与用法详解
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
如何在云指建站中生成FTP站点?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
python中快速进行多个字符替换的方法小结
如何生成腾讯云建站专用兑换码?
Laravel如何处理文件下载请求?(Response示例)
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
Laravel API资源类怎么用_Laravel API Resource数据转换
iOS发送验证码倒计时应用
EditPlus中的正则表达式 实战(1)
Laravel模型事件有哪些_Laravel Model Event生命周期详解
javascript基于原型链的继承及call和apply函数用法分析
Internet Explorer官网直接进入 IE浏览器在线体验版网址
如何打造高效商业网站?建站目的决定转化率
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
linux写shell需要注意的问题(必看)
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Laravel如何优化应用性能?(缓存和优化命令)
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
公司门户网站制作流程,华为官网怎么做?
Laravel如何使用Gate和Policy进行授权?(权限控制)
java获取注册ip实例
网站制作报价单模板图片,小松挖机官方网站报价?
Python高阶函数应用_函数作为参数说明【指导】
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Laravel观察者模式如何使用_Laravel Model Observer配置
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
上一篇:git中怎么设置跟踪
下一篇:如何使用GIT来查看改动的文件
上一篇:git中怎么设置跟踪
下一篇:如何使用GIT来查看改动的文件


