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 load方法用法集锦
Dec 06 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
Aug 28 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
Aug 27 Javascript
JS动态给对象添加事件的简单方法
Jul 19 Javascript
高效Web开发的10个jQuery代码片段
Jul 22 Javascript
纯JS单页面赛车游戏制作代码分享
Mar 03 Javascript
Vue之Watcher源码解析(1)
Jul 19 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
Jan 16 Javascript
基于Vuex无法观察到值变化的解决方法
Mar 01 Javascript
Angularjs中date过滤器失效的问题及解决方法
Jul 06 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
May 23 Javascript
es5 类与es6中class的区别小结
Nov 09 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获取数组最大值下标的方法
2015/05/12 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
Python爬虫爬验证码实现功能详解
2016/04/14 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
python实现小球弹跳效果
2019/05/10 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
网站域名和主机:Domain.com
2019/04/01 全球购物
为什么要用EJB
2014/04/17 面试题
工作决心书范文
2014/03/11 职场文书
开工仪式主持词
2014/03/20 职场文书
周年庆典主持词
2014/04/02 职场文书
节约用水倡议书
2014/04/16 职场文书
求职教师自荐书
2014/06/19 职场文书
植物生产学专业求职信
2014/08/08 职场文书
产品调价通知函
2015/04/20 职场文书
大学军训心得体会800字
2016/01/11 职场文书
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL
python数字图像处理:图像的绘制
2022/06/28 Python