JavaScript事件冒泡机制原理实例解析


Posted in Javascript onJanuary 14, 2020

这篇文章主要介绍了JavaScript事件冒泡机制原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段,事件冒泡顺序是由内到外进行事件传播,事件冒泡是由IE开发团队提出来的,即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播。

听了简介介绍之后,您可能不理解,所以举个例子:

<html>
<head>
<title>js事件冒泡测试</title>
</head>
<body>
<div id='content' onclick='alert("content")'>
<div id='div' onclick='alert("div");'>
<ul onclick='alert("ul");'>
<li onclick='alert("li");'>test</li>
</ul>
</div>
</div>
</body>
</html>

点击test页签,会依次执行li的onclick、ul的onclick、div的onclick,content的onclick,从内到外执行,所以这个就是冒泡事件的简单例子

最近也遇到了这种情况,所以就去网上搜索资料,简单学习一下,就是点击一个按钮的时候,竟然触发了两次,通过排查,发现了冒泡机制导致的,解决方法是禁用事件冒泡机制

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

$(element).click(function(e){
  e.stopPropagation();//ie e.cancelBubble = true
});

当然除了冒泡机制会导致onclick被调用两次外,事件被绑定2次的情况也有可能,解决方法是解除事件,然后再绑定

$(element).unbind('click').click(function() {
    // todo  
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript - HTML的request类
Jul 15 Javascript
js+xml生成级联下拉框代码
Jul 24 Javascript
jquery中获取id值方法小结
Sep 22 Javascript
JS实现动态移动层及拖动浮层关闭的方法
Apr 30 Javascript
javascript检测两个数组是否相似
May 19 Javascript
一种新的javascript对象创建方式Object.create()
Dec 28 Javascript
JS获取IMG图片高宽的简单实例
May 17 Javascript
jquery制做精致的倒计时特效
Jun 13 Javascript
Angularjs 实现分页功能及示例代码
Sep 14 Javascript
bootstrap fileinput 上传插件的基础使用
Feb 17 Javascript
详解RequireJs官方使用教程
Oct 31 Javascript
vue数据控制视图源码解析
Mar 28 Javascript
JS window对象简单操作完整示例
Jan 14 #Javascript
让mocha支持ES6模块的方法实现
Jan 14 #Javascript
JavaScript遍历数组的方法代码实例
Jan 14 #Javascript
JavaScript回调函数callback用法解析
Jan 14 #Javascript
JS document对象简单用法完整示例
Jan 14 #Javascript
JS document内容及样式操作完整示例
Jan 14 #Javascript
微信小程序indexOf的替换方法(推荐)
Jan 14 #Javascript
You might like
解析PHP 5.5 新特性
2013/07/02 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
python多进程实现进程间通信实例
2017/11/24 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
python openssl模块安装及用法
2020/12/06 Python
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
党委书记岗位职责
2013/11/24 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
六一儿童节开幕词
2015/01/29 职场文书
音乐教师个人总结
2015/02/06 职场文书
捐款仪式主持词
2015/07/04 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
纯html+css实现打字效果
2021/08/02 HTML / CSS