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 相关文章推荐
表单项的name命名为submit、reset引起的问题
Dec 22 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
JS中的二叉树遍历详解
Mar 18 Javascript
js内置对象处理_打印学生成绩单的简单实现
Sep 24 Javascript
基于AngularJS前端云组件最佳实践
Oct 20 Javascript
Angular.JS学习之依赖注入$injector详析
Oct 20 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
Dec 30 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
Dec 27 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
Feb 07 Javascript
vue移动端路由切换实例分析
May 14 Javascript
js 数组详细操作方法及解析合集
Jun 01 Javascript
解决循环中setTimeout执行顺序的问题
Jun 20 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代码把全角数字转为半角数字
2007/12/10 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
Python探索之SocketServer详解
2017/10/28 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
Django REST framework 分页的实现代码
2019/06/19 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
Python jieba库用法及实例解析
2019/11/04 Python
Python中的整除和取模实例
2020/06/03 Python
如何在python中处理配置文件代码实例
2020/09/27 Python
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
人力资源管理专业应届生求职信
2013/09/28 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
公司的力量观后感
2015/06/05 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android
MySQL transaction事务安全示例讲解
2022/06/21 MySQL