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 相关文章推荐
学习YUI.Ext 第四天--对话框Dialog的使用
Mar 10 Javascript
Javascript打印网页部分内容的脚本
Nov 17 Javascript
jQuery 性能优化指南(2)
May 21 Javascript
javascript学习笔记(九) js对象 设计模式
Jun 19 Javascript
jquery操作checked属性以及disabled属性的多种方法
Jun 20 Javascript
在JavaScript中操作时间之setYear()方法的使用
Jun 12 Javascript
AngularJS实现图片上传和预览功能的方法分析
Nov 08 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
Jan 16 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
Feb 22 Javascript
VUE安装使用教程详解
Jun 03 Javascript
解决vue的过渡动画无法正常实现问题
Oct 31 Javascript
Vue实现Header渐隐渐现效果的实例代码
Nov 05 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中static静态变量的使用方法详解
2010/06/04 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
div层的移动及性能优化
2010/11/16 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
js代码编写无缝轮播图
2020/09/13 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
Django中使用group_by的方法
2015/05/26 Python
python实现贪吃蛇游戏
2020/03/21 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
python序列类型种类详解
2020/02/26 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
python在协程中增加任务实例操作
2021/02/28 Python
数字漫画:comiXology
2020/06/13 全球购物
如何清空Session
2015/02/23 面试题
Java如何调用外部Exe程序
2015/07/04 面试题
2014年小学教师工作自我评价
2014/09/22 职场文书
大学生村官个人总结
2015/02/15 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
Python Django搭建文件下载服务器的实现
2021/05/10 Python
Java使用Unsafe类的示例详解
2021/09/25 Java/Android