如何监听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 判断真正被点的是谁。但新手常混淆 targetcurrentTarget

  • 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模型常用查询逻辑封装技巧【手册】