jquery 事件冒泡的介绍以及如何阻止事件冒泡


Posted in Javascript onDecember 25, 2012

什么是JS事件冒泡?
在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。

如何来阻止Jquery事件冒泡?
通过一个小例子来解释

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default5.aspx.cs"Inherits="Default5"%> 
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<htmlxmlns="http://www.w3.org/1999/xhtml"> 
<headrunat="server"> 
<title>Porschev---Jquery事件冒泡</title> 
<scriptsrc="jquery-1.3.2-vsdoc.js"type="text/javascript"></script> 
</head> 
<body> 
<formid="form1"runat="server"> 
<divid="divOne"onclick="alert('我是最外层');"> 
<divid="divTwo"onclick="alert('我是中间层!')"> 
<aid="hr_three"href="http://www.baidu.com"mce_href="http://www.baidu.com"onclick="alert('我是最里层!')">点击我</a> 
</div> 
</div> 
</form> 
</body> 
</html>

比如上面这个页面,
分为三层:divOne是第外层,divTwo中间层,hr_three是最里层;
他们都有各自的click事件,最里层a标签还有href属性。
运行页面,点击“点击我”,会依次弹出:我是最里层---->我是中间层---->我是最外层---->然后再链接到百度.
这就是事件冒泡,本来我只点击ID为hr_three的标签,但是确执行了三个alert操作。
事件冒泡过程(以标签ID表示):hr_three---->divTwo---->divOne。从最里层冒泡到最外层。

如何来阻止?
1.event.stopPropagation();

<scripttype="text/javascript"> 
$(function(){ 
$("#hr_three").click(function(event){ 
event.stopPropagation(); 
}); 
}); 
<script>

再点击“点击我”,会弹出:我是最里层,然后链接到百度

2.returnfalse;
如果头部加入的是以下代码

<scripttype="text/javascript"> 
$(function(){ 
$("#hr_three").click(function(event){ 
returnfalse; 
}); 
}); 
<script>

再点击“点击我”,会弹出:我是最里层,但不会执行链接到百度页面

由此可以看出
1.event.stopPropagation();
事件处理过程中,阻止了事件冒泡,但不会阻击默认行为(它就执行了超链接的跳转)
2.returnfalse;
事件处理过程中,阻止了事件冒泡,也阻止了默认行为(比如刚才它就没有执行超链接的跳转)
还有一种有冒泡有关的:
3.event.preventDefault();
如果把它放在头部A标签的click事件中,点击“点击我”。
会发现它依次弹出:我是最里层---->我是中间层---->我是最外层,但最后却没有跳转到百度
它的作用是:事件处理过程中,不阻击事件冒泡,但阻击默认行为(它只执行所有弹框,却没有执行超链接跳转)

Javascript 相关文章推荐
一个简单的javascript类定义例子
Sep 12 Javascript
JavaScript利用正则表达式去除日期中的-
Jun 09 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
Aug 05 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
Nov 07 Javascript
js表单中选择框值的获取及表单的序列化
Dec 17 Javascript
javascript中call apply 与 bind方法详解
Mar 10 Javascript
Jquery基础之事件操作详解
Jun 14 Javascript
JavaScript箭头(arrow)函数详解
Jun 04 Javascript
解决vue-router进行build无法正常显示路由页面的问题
Mar 06 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
Jul 26 Javascript
基于vue手写tree插件的那点事儿
Aug 20 Javascript
JS变量提升原理与用法实例浅析
May 22 Javascript
js优化针对IE6.0起作用(详细整理)
Dec 25 #Javascript
js 取时间差去掉周六周日实现代码
Dec 25 #Javascript
纯js网页画板(Graphics)类简介及实现代码
Dec 24 #Javascript
Knockoutjs快速入门(经典)
Dec 24 #Javascript
Underscore.js 的模板功能介绍与应用
Dec 24 #Javascript
javascript 星级评分效果(手写)
Dec 24 #Javascript
Jquery写一个鼠标拖动效果实现原理与代码
Dec 24 #Javascript
You might like
PHP中的array数组类型分析说明
2010/07/27 PHP
色色整理的PHP面试题集锦
2012/03/08 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
javascript 继承实现方法
2009/08/26 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
jquery事件绑定解绑机制源码解析
2016/09/19 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
jQuery实现简单的下拉菜单导航功能示例
2017/12/07 jQuery
Vue中插入HTML代码的方法
2018/09/21 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
selenium自动化测试入门实战
2020/12/21 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
小学家长会邀请函
2014/01/23 职场文书
临床护士自荐信
2014/01/31 职场文书
优秀技术工人先进材料
2014/02/17 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
会计求职信
2014/05/29 职场文书
公司任命书模板
2014/06/06 职场文书
经典毕业生求职信
2014/07/12 职场文书
村安全生产责任书
2014/08/25 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python