JS中绑定事件顺序(事件冒泡与事件捕获区别)

发布时间 - 2026-01-10 22:46:57    点击率:

在JS中,绑定的事件默认的执行时间是在冒泡阶段执行,而非在捕获阶段(重要),这也是为什么当父类和子类都绑定了某个事件,会先调用子类绑定的事件,后调用父类的事件。直接看下面实例

<!Doctype html>
<html>
<head>
 <meta charset="utf-8">
 <title></title>
 <style type="text/css">
 *{margin:0;padding: 0;}
 </style>
</head>
<body>
<div id="id1" style="height:400px; border:1px solid #000;">
 <div id="id2" style="height:200px; border:1px solid #000;">
 <div id="id3" style="height:50px; border:1px solid #000;"></div>
 </div>
</div>
</body>
<script type="text/javascript">
 var obj1=document.getElementById('id1'); 
 obj1.addEventListener('click',function(){
 alert('id1');
 },false);
 var obj2=document.getElementById('id2');
 obj2.addEventListener('click',function(){
 alert('id2');
 },true);
 var obj3=document.getElementById('id3');
 obj3.addEventListener('click',function(){
 alert('id3');
 },true);
 /*如果第三个参数为true,则事件在捕获阶段执行,如果第三个参数为false,则事件在冒泡阶段执行*/
</script>
</html>

当点击id3元素时候,执行结果是:id2,id3,id1

解析:因为obj2与obj3绑定的方法在捕获阶段执行,obj1的事件在冒泡阶段执行。

总结

在JS中,绑定的事件默认的执行时间是在冒泡阶段执行,而非在捕获阶段,必须要理解

不过我们可以通过绑定事件时,指定事件执行时间是在冒泡阶段还是捕获阶段。

obj.addEventListener(event,function(){},bool)

bool:false,代表冒泡阶段执行

bool:true,代表捕获阶段执行

JS在默认情况下获取事件后,就开始从根元素开始捕获所有该事件的监听对象,然后在冒泡阶段逐一执行。捕获阶段是在冒泡阶段前面

阻止冒泡

w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true;

阻止默认行为

w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false;

关于JS 事件冒泡和onclick,click,on()事件触发顺序

onclick,click,on()的优先关系:onclick>click>on();

onclick和click绑定的事件,彼此之间遵守事件冒泡规则,从内到外触发;

on()绑定的事件,总是晚于onclick和click绑定的事件触发;

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# js  # 事件捕获  # 冒泡  # 事件冒泡  # JavaScript事件冒泡与事件捕获实例分析  # javascript 中事件冒泡和事件捕获机制的详解  # 一篇文章让你彻底弄懂JS的事件冒泡和事件捕获  # js事件冒泡与事件捕获详解  # 浅谈javascript中的事件冒泡和事件捕获  # JS中事件冒泡和事件捕获介绍  # javascript事件冒泡和事件捕获详解  # js之事件冒泡和事件捕获详细介绍  # 浅析js中事件冒泡与事件捕获  # 绑定  # 是在  # 执行时间  # 子类  # 则是  # 第三个  # 而非  # 我们可以  # 定了  # 会先  # 内到  # 情况下  # 这也是  # 就开始  # 晚于  # 结果是  # 必须要  # padding  # style  # type 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Linux网络带宽限制_tc配置实践解析【教程】  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Laravel如何优化应用性能?(缓存和优化命令)  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何快速登录WAP自助建站平台?  如何在腾讯云服务器上快速搭建个人网站?  如何快速生成凡客建站的专业级图册?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  如何彻底删除建站之星生成的Banner?  在centOS 7安装mysql 5.7的详细教程  javascript如何操作浏览器历史记录_怎样实现无刷新导航  简单实现Android验证码  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  如何在自有机房高效搭建专业网站?  Laravel如何实现API资源集合?(Resource Collection教程)  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  高端建站三要素:定制模板、企业官网与响应式设计优化  如何解决hover在ie6中的兼容性问题  网站制作壁纸教程视频,电脑壁纸网站?  如何快速生成ASP一键建站模板并优化安全性?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Laravel如何生成URL和重定向?(路由助手函数)  b2c电商网站制作流程,b2c水平综合的电商平台?  Swift中循环语句中的转移语句 break 和 continue  在Oracle关闭情况下如何修改spfile的参数  Android Socket接口实现即时通讯实例代码  Laravel如何记录自定义日志?(Log频道配置)  Linux后台任务运行方法_nohup与&使用技巧【技巧】  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  如何在阿里云香港服务器快速搭建网站?  如何在万网自助建站中设置域名及备案?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  做企业网站制作流程,企业网站制作基本流程有哪些?  python中快速进行多个字符替换的方法小结  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  高端网站建设与定制开发一站式解决方案 中企动力  如何用PHP工具快速搭建高效网站?  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  Laravel集合Collection怎么用_Laravel集合常用函数详解  如何用花生壳三步快速搭建专属网站?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  javascript中的try catch异常捕获机制用法分析