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 相关文章推荐
jQuery autocomplete插件修改
Apr 17 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
Jan 24 Javascript
js获取URL的参数的方法(getQueryString)示例
Sep 29 Javascript
Iframe 自动适应页面的高度示例代码
Feb 26 Javascript
javascript实时显示当天日期的方法
May 20 Javascript
AngularJS延迟加载html template
Jul 27 Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
Oct 24 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
Dec 16 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
Dec 25 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
Jul 27 Javascript
如何通过vscode运行调试javascript代码
Jul 24 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之第四天
2006/10/09 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
php常用文件操作函数汇总
2014/11/22 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
Python实现二叉堆
2016/02/03 Python
python 识别图片中的文字信息方法
2018/05/10 Python
详解Python中的四种队列
2018/05/21 Python
python调用c++传递数组的实例
2019/02/13 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
小学科学课教学反思
2016/02/23 职场文书