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


Posted in Javascript onJanuary 24, 2017

在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绑定的事件触发;

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

Javascript 相关文章推荐
js 多浏览器分别判断代码
Apr 01 Javascript
js substring从右边获取指定长度字符串(示例代码)
Dec 23 Javascript
jquery实现拖动效果
Aug 10 Javascript
关于vuex的学习实践笔记
Apr 05 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
Jun 26 jQuery
node使用Koa2搭建web项目的方法
Oct 17 Javascript
Vue组件库发布到npm详解
Feb 17 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
Aug 10 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
Dec 13 Javascript
layui表格设计以及数据初始化详解
Oct 26 Javascript
webpack是如何实现模块化加载的方法
Nov 06 Javascript
微信小程序如何加载数据库真实数据的实现
Mar 04 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
Jan 24 #Javascript
JavaScript解析JSON格式数据的方法示例
Jan 24 #Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
Jan 24 #Javascript
Jquery树插件zTree实现菜单树
Jan 24 #Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
Jan 24 #Javascript
树结构之JavaScript
Jan 24 #Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 #Javascript
You might like
改造一台复古桌面收音机
2021/03/02 无线电
PHP 一个页面执行时间类代码
2010/03/05 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
详解PHP中的PDO类
2015/07/06 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
jquery UI 1.72 之datepicker
2009/12/29 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
JS检测移动端横竖屏的代码
2016/05/30 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
Django入门使用示例
2017/12/12 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
详解Python循环作用域与闭包
2019/03/21 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
python中的列表和元组区别分析
2020/12/30 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
专升本个人自我评价
2013/12/22 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
植树节活动总结
2014/04/30 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
2015年考研复习计划
2015/01/19 职场文书
2015年教学工作总结
2015/04/02 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang