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 相关文章推荐
js实现的折叠导航示例
Nov 29 Javascript
使用js判断当前时区TimeZone是否是夏令时
Feb 23 Javascript
js中通过父级进行查找定位元素
Jun 15 Javascript
直接在JS里创建JSON数据然后遍历使用
Jul 25 Javascript
Javascript中call,apply,bind方法的详解与总结
Dec 12 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
Mar 22 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
May 26 Javascript
微信小程序冒泡事件及其阻止方法实例分析
Dec 06 Javascript
turn.js异步加载实现翻书效果
Jul 25 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
Sep 06 Javascript
vue实现树形结构样式和功能的实例代码
Oct 15 Javascript
JS async 函数的含义和用法实例总结
Apr 08 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句法规则详解 入门学习
2011/11/09 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
分享php多功能图片处理类
2016/05/15 PHP
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
使用python统计文件行数示例分享
2014/02/21 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
对python生成业务报表的实例详解
2019/02/03 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
Python实现LR1文法的完整实例代码
2020/10/25 Python
餐饮加盟计划书
2014/01/10 职场文书
关于安全的标语
2014/06/10 职场文书
庆七一宣传标语
2014/10/08 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
房产公证书
2015/01/23 职场文书
师德师风个人总结
2015/02/06 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python
Pytorch 如何实现常用正则化
2021/05/27 Python
一文解答什么是MySQL的回表
2022/08/05 MySQL