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 相关文章推荐
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
Apr 01 Javascript
JS打印gridview实现原理及代码
Feb 05 Javascript
jQuery制作简单柱状图实例
Jan 28 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
Dec 03 Javascript
JavaScript 深层克隆对象详解及实例
Nov 03 Javascript
Javascript数组循环遍历之forEach详解
Nov 07 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
Nov 29 Javascript
基于javascript实现按圆形排列DIV元素(三)
Dec 02 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
Sep 27 Javascript
原生js添加一个或多个类名的方法分析
Jul 30 Javascript
jQuery cookie的公共方法封装和使用示例
Jun 01 jQuery
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 5.3.5安装memcache注意事项小结
2011/04/12 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
JavaScript与函数式编程解释
2007/04/27 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
Python with语句和过程抽取思想
2019/12/23 Python
python关于调用函数外的变量实例
2019/12/26 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
草船借箭教学反思
2014/02/03 职场文书
《藏戏》教学反思
2014/02/11 职场文书
商务英语广告词大全
2014/03/18 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
推销搭讪开场白
2015/05/28 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫