详解javascript事件冒泡


Posted in Javascript onJanuary 09, 2016

事件是javascript中的核心内容之一,在对事件的应用中不可避免的要涉及到一个重要的概念,那就是事件冒泡,在介绍事件冒泡之前,先介绍一下另一个重要的概念事件流:
一.什么是事件流:
文档对象模型(DOM)是一个树形结构,可以形象的用下图表示。

详解javascript事件冒泡

如果一个html元素触发事件,那么这个事件就会在DOM树中的触发节点和根节点之间按照一定的顺序传播,所有经过的节点都会接收到被触发的事件,这个传播过程被称之为事件流。按照事件的传播顺序,可以将其分为两类,一种是事件冒泡,一种是事件捕获,这里就涉及到本章要介绍的主题了:
1.事件冒泡:
所谓的时间冒泡就是当一个元素触发一个事件,事件会像是水泡一样,从触发元素向它的所有父节点传播,一直到根节点都会接收到此事件,如果父元素中注册了相应的事件处理函数,那么尽管事件在子节点触发的,在父元素上注册的事件处理函数同样会被触发。例如在上面图示中,如果触发a元素的onclick事件,那么它的父元素p、document和widow都会接收到此事件,并且如果在相应的父元素注册有时间处理函数,那么此事件处理函数将会执行,看一段代码实例:

<html>
<head>
<meta charset="utf-8"/>
<title>事件冒泡简单介绍</title>
<script type="text/javascript">
window.onload=function(){
 var table=document.getElementById("mytable");
 table.onclick=function(e){
 var event=e||window.event;
 target=event.srcElement||event.target;
 alert(target.innerHTML);
 }
}
</script>
</head>
<body>
<table width="400" border="1" id="mytable">
<tr>
 <td>三水点靠木</td>
 <td>三水点靠木</td>
 <td>三水点靠木</td>
</tr>
<tr>
 <td>三水点靠木</td>
 <td>三水点靠木</td>
 <td>三水点靠木</td>
</tr>
<tr>
 <td>三水点靠木</td>
 <td>三水点靠木</td>
 <td>三水点靠木</td>
</tr>
</table>
</body>
</html>

以上代码的目的是,当点击相应的单元格的时候就会弹出对应单元格中的内容。但是在上面的实现中并不是为每一个单元格注册onclick事件处理函数,而是将onclick事件处理函数注册于单元格的父元素table上,当点击单元格的时候会触发onclick事件,事件还会从从事件对象向上传播,而table元素恰好有注册的onclick事件处理函数,这个时候就会执行此处理函数,当然这里会设置到传递事件对象参数的问题。所有的浏览器都支持事件冒泡。二.事件捕获:
事件捕获和事件冒泡恰好相反,当点击一个元素的时候,事件传播的方向是从根元素到触发元素,IE浏览器并不支持,为了跨浏览器支持,所以默认情况下一般都是使用冒泡型事件处理模型。
2.javascript阻止事件冒泡代码
事件冒泡在某些场景非常的有用,但是有时候也是必须要阻止,下面是一段能够兼容所有主流浏览器的阻止事件冒泡的实例代码。
代码实例:

function stopBubble(e) 
{ 
 if(e&&e.stopPropagation) 
 { 
 e.stopPropagation(); 
 } 
 else
 { 
 window.event.cancelBubble=true; 
 } 
}

以上代码可以阻止事件冒泡,下面对代码做一下简单注释:
二、代码注释:

  • 1.function stopBubble(e) {},此函数用来阻止事件冒泡,参数是个事件对象。
  • 2. if(e&&e.stopPropagation){e.stopPropagation();},判断是否支持stopPropagation,如果支持就使用e.stopPropagation()。stopPropagation()函数IE10和IE10以下浏览器不支持。
  • 3.window.event.cancelBubble=true,当前IE浏览器使用这个可以阻止事件冒泡。

以上就是关于javascript事件冒泡的详细介绍,希望对大家的学习有所帮助。

Javascript 相关文章推荐
IE与firefox下Dhtml的一些区别小结
Dec 02 Javascript
js中实现多态采用和继承类似的方法
Aug 22 Javascript
node.js中的console.assert方法使用说明
Dec 10 Javascript
基于jQuery实现在线选座之高铁版
Aug 24 Javascript
微信小程序 获取微信OpenId详解及实例代码
Oct 31 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
Dec 28 Javascript
基于javascript实现数字英文验证码
Jan 25 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
Mar 09 Javascript
学习使用Bootstrap栅格系统
May 11 Javascript
全面解析Node.js 8 重要功能和修复
Jun 02 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
Jun 06 Javascript
js实现简单的贪吃蛇游戏
Apr 23 Javascript
js父页面中使用子页面的方法
Jan 09 #Javascript
jquery调整表格行tr上下顺序实例讲解
Jan 09 #Javascript
实例讲解js验证表单项是否为空的方法
Jan 09 #Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
Jan 09 #Javascript
javascript跑马灯抽奖实例讲解
Apr 17 #Javascript
jQuery页面刷新(局部、全部)问题分析
Jan 09 #Javascript
javascript返回顶部的按钮实现方法
Jan 09 #Javascript
You might like
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
php中转义mysql语句的实现代码
2011/06/24 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
Python学习之用pygal画世界地图实例
2017/12/07 Python
对Python 语音识别框架详解
2018/12/24 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
送给程序员的20个Java集合面试问题
2014/08/06 面试题
岗位职责定义及内容
2013/11/08 职场文书
小学开学寄语
2014/01/19 职场文书
安全责任书范文
2014/03/12 职场文书
村级四风对照检查材料
2014/08/24 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
反四风对照检查材料
2014/09/22 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android