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 相关文章推荐
jquery 分页控件实现代码
Nov 30 Javascript
jQuery代码优化之基本事件
Nov 01 Javascript
js原生appendChild的bug解决心得分享
Jul 01 Javascript
javascript实现动态导入js与css等静态资源文件的方法
Jul 25 Javascript
jquery实现简单合拢与展开网页面板的方法
Sep 01 Javascript
基于javascript实现窗口抖动效果
Jan 03 Javascript
深入理解JavaScript 函数
Jun 06 Javascript
jQuery双向列表选择器DIV模拟版
Nov 01 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
Mar 30 Javascript
使用JavaScript实现一个小程序之99乘法表
Sep 21 Javascript
vue Tab切换以及缓存页面处理的几种方式
Nov 05 Javascript
JavaScript 原型与原型链详情
Nov 02 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 curl实现抓取302跳转后页面的示例
2014/07/04 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
python实现问号表达式(?)的方法
2013/11/27 Python
跟老齐学Python之一个免费的实验室
2014/09/14 Python
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
用 Python 制作地球仪的方法
2020/04/24 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
墨西哥网上超市:Superama
2018/07/10 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
技能竞赛活动方案
2014/02/21 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL