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 相关文章推荐
关于Blog顶部的滚动导航条代码
Sep 25 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
Jul 25 Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
Aug 20 Javascript
node.js express安装及示例网站搭建方法(分享)
Aug 22 Javascript
JS简单去除数组中重复项的方法
Sep 13 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
Nov 30 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
Jan 10 Javascript
vue-resource 拦截器使用详解
Feb 21 Javascript
Angularjs实现控制器之间通信方式实例总结
Mar 27 Javascript
浅谈vue项目如何打包扔向服务器
May 08 Javascript
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
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实现页面无刷新发表评论
2007/01/02 PHP
用PHP读取RSS feed的代码
2008/08/01 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
通过示例彻底搞懂js闭包
2017/08/10 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
python实现给字典添加条目的方法
2014/09/25 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
控制工程专业个人求职信
2013/09/25 职场文书
创意活动策划书
2014/01/15 职场文书
社区安全检查制度
2014/02/03 职场文书
乡镇三项教育实施方案
2014/03/30 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
庆祝教师节活动总结
2015/03/23 职场文书
研究生论文答辩开场白
2015/05/27 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL