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 相关文章推荐
实现复选框全选/全不选切换
Dec 23 Javascript
Dom加载让图片加载完再执行的脚本代码
May 15 Javascript
JavaScript的9个陷阱及评点分析
May 16 Javascript
jquery时间下拉框小例子
Apr 15 Javascript
获取表单控件原始(初始)值的方法
Aug 21 Javascript
关于js数组去重的问题小结
Jan 24 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
Dec 24 Javascript
jquery zTree异步加载简单实例讲解
Feb 25 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
May 25 Javascript
基于JavaScript实现轮播图原理及示例
Apr 10 Javascript
vue如何解决循环引用组件报错的问题
Sep 22 Javascript
vue里如何主动销毁keep-alive缓存的组件
Mar 21 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
window.open()弹出居中的窗口
2007/02/01 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
浅析vue深复制
2018/01/29 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
Python最基本的输入输出详解
2015/04/25 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
python 字符串追加实例
2019/07/20 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
远程教育心得体会
2014/01/03 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
丧事主持词大全
2014/04/02 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
继续教育个人总结
2015/03/03 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python