js冒泡、捕获事件及阻止冒泡方法详细总结


Posted in Javascript onMay 08, 2014

javascript, jquery的事件中都存在事件冒泡和事件捕获的问题,下面将两种问题及其解决方案做详细总结。

事件冒泡是一个从子节点向祖先节点冒泡的过程;

事件捕获刚好相反,是从祖先节点到子节点的过程。

给一个jquery点击事件的例子:

代码如下:

<!DOCTYPE html> 
<meta charset="utf-8"> 
<title>test</title> 
<head> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script type="text/javascript"> 
$(function(){ 
$('#clickMe').click(function(){ 
alert('hello'); 
}); 
$('body').click(function(){ 
alert('baby'); 
}); 
}); 
</script> 
</head> 
<body> 
<div style="width:100px;height:100px;background-color:red;"> 
<button type="button" id="button2">click me</button> 
<button id="clickMe">click</button> 
</div> 
</body> 
</html>

事件冒泡现象:点击 “id=clickMe” 的button,会先后出现“hello” 和 “baby” 两个弹出框。

分析:当点击 “id=clickMe” 的button时,触发了绑定在button 和 button 父元素及body的点击事件,所以先后弹出两个框,出现所谓的冒泡现象。

事件捕获现象:点击没有绑定点击事件的div和 “id=button2” 的button, 都会弹出 “baby” 的对话框。

在实际的项目中,我们要阻止事件冒泡和事件捕获现象。

阻止事件冒泡方法:

法1:当前点击事件中return false;

$('#clickMe').click(function(){ 
alert('hello'); return false; 
});

法2:
$('#clickMe').click(function(event){ 
alert('hello'); var e = window.event || event; 
if ( e.stopPropagation ){ //如果提供了事件对象,则这是一个非IE浏览器 
e.stopPropagation(); 
}else{ 
//兼容IE的方式来取消事件冒泡 
window.event.cancelBubble = true; 
} 
});

貌似捕获事件不能被阻止
Javascript 相关文章推荐
一端时间轮换的广告
Jun 26 Javascript
JavaScript 节点操作 以及DOMDocument属性和方法
Dec 06 Javascript
js模拟弹出效果代码修正版
Aug 07 Javascript
jQuery 页面载入进度条实现代码
Feb 08 Javascript
JS代码优化技巧之通俗版(减少js体积)
Dec 23 Javascript
js中replace的用法总结
Dec 27 Javascript
jquery css 设置table的奇偶行背景色示例
Jun 03 Javascript
javascript函数中参数传递问题示例探讨
Jul 31 Javascript
javascript中setAttribute()函数使用方法及兼容性
Jul 19 Javascript
js获取页面及个元素高度、宽度的代码
Apr 26 Javascript
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 Javascript
JavaScript二维数组实现的省市联动菜单
May 08 #Javascript
javascript中setTimeout的问题解决方法
May 08 #Javascript
在JavaScript中使用timer示例
May 08 #Javascript
JavaScript中读取和保存文件实例
May 08 #Javascript
ExtJS中设置下拉列表框不可编辑的方法
May 07 #Javascript
jquery 显示*天*时*分*秒实现时间计时器
May 07 #Javascript
解决jQuery动态获取手机屏幕高和宽的问题
May 07 #Javascript
You might like
php下封装较好的数字分页方法
2010/11/23 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
解决Vue @submit 提交后不刷新页面问题
2020/07/18 Javascript
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
毕业生就业自荐书
2013/12/15 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
奖学金个人总结
2015/03/04 职场文书
校园广播站开场白
2015/06/01 职场文书
高中地理教学反思
2016/02/19 职场文书
600字作文之感受大自然
2019/11/27 职场文书
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
如何Python使用re模块实现okenizer
2022/04/30 Python
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技