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 相关文章推荐
Extjs4 关于Store的一些操作(加载/回调/添加)
Apr 18 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
Jan 09 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
Sep 10 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
Mar 31 Javascript
javascript cookie的简单应用
Feb 24 Javascript
jQuery验证插件validate使用详解
May 11 Javascript
jQuery选择器实例应用
Jan 05 Javascript
es7学习教程之Decorators(修饰器)详解
Jul 21 Javascript
微信小程序wx.previewImage预览图片实例详解
Dec 07 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
Dec 19 Javascript
JavaScript判断对象和数组的两种方法
May 31 Javascript
JavaScript高级程序设计之变量与作用域
Nov 17 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
利用PHP和AJAX创建RSS聚合器的代码
2007/03/13 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
php中in_array函数用法分析
2014/11/15 PHP
php类自动加载器实现方法
2015/07/28 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
2018/01/07 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Python Socket编程详细介绍
2017/03/23 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
python实现狄克斯特拉算法
2019/01/17 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
公司市场部岗位职责
2013/12/02 职场文书
电子商务专员岗位职责
2013/12/11 职场文书
获奖的大学生创业计划书
2014/01/05 职场文书
2014年政协工作总结
2014/12/09 职场文书
元宵节寄语大全
2015/02/27 职场文书
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python