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 相关文章推荐
解决FireFox下[使用event很麻烦]的问题
Nov 26 Javascript
js DOM的学习笔记
Dec 22 Javascript
Javascript Throttle &amp; Debounce应用介绍
Mar 19 Javascript
Javascript无阻塞加载具体方式
Jun 28 Javascript
JavaScript 模块化编程(笔记)
Apr 08 Javascript
JavaScript中数据结构与算法(三):链表
Jun 19 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
Feb 17 Javascript
JS Canvas定时器模拟动态加载动画
Sep 17 Javascript
JS设置随机出现2个数字的实例代码
Jul 19 Javascript
Vue Cli与BootStrap结合实现表格分页功能
Aug 18 Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 Javascript
Ajax实现异步加载数据
Nov 17 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计算上一个月的今天
2013/05/23 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
Python动态生成多维数组的方法示例
2018/08/09 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
Flask框架 CSRF 保护实现方法详解
2019/10/30 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
建党伟业观后感
2015/06/01 职场文书
酒店厨房管理制度
2015/08/06 职场文书
html粘性页脚的具体使用
2022/01/18 HTML / CSS