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队列控制方法详解queue()/dequeue()/clearQueue()
Dec 02 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
Jun 30 Javascript
Nginx上传文件全部缓存解决方案
Aug 17 Javascript
jQuery实现文本框邮箱输入自动补全效果
Nov 17 Javascript
浅谈javascript中new操作符的原理
Jun 07 Javascript
jQuery中Find选择器用法示例
Sep 21 Javascript
JavaScript基本类型值-Number类型
Feb 24 Javascript
微信小程序实现手势图案锁屏功能
Jan 30 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
Jan 24 Javascript
mock.js模拟前后台交互
Jul 25 Javascript
基于vue+element实现全局loading过程详解
Jul 10 Javascript
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
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
COM in PHP (winows only)
2006/10/09 PHP
模拟flock实现文件锁定
2007/02/14 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
react-native-tab-navigator组件的基本使用示例代码
2017/09/07 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
vue 组件销毁并重置的实现
2020/01/13 Javascript
Python SQLite3简介
2018/02/22 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
django 控制页面跳转的例子
2019/08/06 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
小学国庆节活动方案
2014/02/11 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
春风化雨观后感
2015/06/11 职场文书
小学大队长竞选稿
2015/11/20 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
Python内置的数据类型及使用方法
2022/04/13 Python
Python 匹配文本并在其上一行追加文本
2022/05/11 Python