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阻止冒泡和HTML默认操作
Nov 17 Javascript
JQuery动态给table添加、删除行 改进版
Jan 19 Javascript
javascript模拟实现C# String.format函数功能代码
Nov 25 Javascript
jquery实现类似淘宝星星评分功能有截图
Sep 15 Javascript
不同编码的页面表单数据乱码问题解决方法
Feb 15 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
Dec 06 Javascript
BootStrap响应式导航条实例介绍
May 06 Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 Javascript
jQuery组件easyui对话框实现代码
Aug 25 Javascript
npm全局模块卸载及默认安装目录修改方法
May 15 Javascript
js实现京东秒杀倒计时功能
Jan 21 Javascript
Vue全局事件总线你了解吗
Feb 24 Vue.js
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判断变量的函数
2012/04/24 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
详解vue的数据binding绑定原理
2017/04/12 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
JS实现简单日历特效
2020/01/03 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
Python 学习笔记
2008/12/27 Python
python实现代理服务功能实例
2013/11/15 Python
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
python中selenium操作下拉滚动条的几种方法汇总
2019/07/14 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
flask实现验证码并验证功能
2019/12/05 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
python实现磁盘日志清理的示例
2020/11/05 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
社区学雷锋活动策划方案
2014/01/30 职场文书
会计求职自荐信
2014/06/20 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
求职自我推荐信
2015/03/24 职场文书