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代码
Jul 19 Javascript
AngularJS的内置过滤器详解
May 14 Javascript
如何通过js实现图片预览功能【附实例代码】
Mar 30 Javascript
Vue.js学习笔记之 helloworld
Aug 14 Javascript
Angular的模块化(代码分享)
Dec 26 Javascript
jquery mobile实现可折叠的导航按钮
Mar 11 Javascript
纯jQuery实现前端分页功能
Mar 23 jQuery
详解在vue-cli中使用路由
Sep 25 Javascript
ES6使用export和import实现模块化的方法
Sep 10 Javascript
js滚轮事件 js自定义滚动条的实现
Jan 18 Javascript
不刷新网页就能链接新的js文件方法总结
Mar 01 Javascript
Vue+Element UI实现概要小弹窗的全过程
May 30 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
PHP用户指南-cookies部分
2006/10/09 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
Dom在ajax技术中的作用说明
2010/10/25 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
python迭代器实例简析
2014/09/25 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
德国旅游网站:weg.de
2018/06/03 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
单位成立周年感言
2014/01/26 职场文书
集体婚礼策划方案
2014/02/22 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
自我鉴定标准格式
2014/03/19 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
linux下安装redis图文详细步骤
2021/12/04 Redis