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扩展插件Validate—6 radio、checkbox、select的验证
Sep 05 Javascript
js字符串转成JSON
Nov 07 Javascript
Javascript基础教程之break和continue语句
Jan 18 Javascript
jQuery Easyui 验证两次密码输入是否相等
May 13 Javascript
禁用backspace网页回退功能的实现代码
Nov 15 Javascript
浅谈Vue.use到底是什么鬼
Jan 21 Javascript
JS数组扁平化、去重、排序操作实例详解
Feb 24 Javascript
JS手写一个自定义Promise操作示例
Mar 16 Javascript
Javascript组合继承方法代码实例解析
Apr 02 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
Aug 03 Javascript
vue 内联样式style中的background用法说明
Aug 05 Javascript
vue下载二进制流图片操作
Oct 26 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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
PHP 实现多服务器共享 SESSION 数据
2009/08/15 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
JavaScript实现时间表动态效果
2017/07/15 Javascript
微信小程序 获取javascript 里的数据
2017/08/17 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
解决vue的router组件component在import时不能使用变量问题
2020/07/26 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
python字典get()方法用法分析
2015/04/17 Python
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
安全保证书范文
2014/04/29 职场文书
法院信息化建设方案
2014/05/21 职场文书
人民调解员培训方案
2014/06/05 职场文书
平安工地汇报材料
2014/08/19 职场文书
计划生育证明格式范本
2014/09/12 职场文书
导游欢送词
2015/01/31 职场文书
Go timer如何调度
2021/06/09 Golang
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS