详解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 相关文章推荐
Jquery命名冲突解决的五种方案分享
Mar 16 Javascript
jquery实现对联广告的方法
Feb 05 Javascript
jQuery中大家不太了解的几个方法
Mar 04 Javascript
浅谈类似于(function(){}).call()的js语句
Mar 30 Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 Javascript
JavaScript常用字符串与数组扩展函数小结
Apr 24 Javascript
浅谈angular懒加载的一些坑
Aug 20 Javascript
使用BootStrap实现悬浮窗口的效果
Dec 13 Javascript
微信小程序配置服务器提示验证token失败的解决方法
Apr 03 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
Aug 07 Javascript
通过实例了解Render Props回调地狱解决方案
Nov 04 Javascript
JavaScript实现图片合成下载的示例
Nov 19 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中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
浅谈Javascript事件模拟
2012/06/27 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
2019/06/17 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
Python中的匿名函数使用简介
2015/04/27 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
python函数不定长参数使用方法解析
2019/12/14 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
开业主持词
2014/03/21 职场文书
国庆宣传标语
2014/06/30 职场文书
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python