详解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 相关文章推荐
Javascript玩转继承(三)
May 08 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
Mar 13 Javascript
详解JavaScript中循环控制语句的用法
Jun 03 Javascript
AngularJS实现表单手动验证和表单自动验证
Dec 09 Javascript
基于javascript实现全屏漂浮广告
Mar 31 Javascript
Angualrjs和bootstrap相结合实现数据表格table
Mar 30 Javascript
js实现登录与注册界面
Nov 01 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
Nov 24 Javascript
JS性能优化实现方法及优点进行
Aug 30 Javascript
js轮播图之旋转木马效果
Oct 13 Javascript
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
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
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
php单例模式示例分享
2015/02/12 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
vue-cli脚手架的安装教程图解
2018/09/02 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
easy_install python包安装管理工具介绍
2013/02/10 Python
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
关于Python数据结构中字典的心得
2017/12/04 Python
python中的变量如何开辟内存
2018/06/26 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
初中生物教学反思
2014/01/10 职场文书
教师远程培训感言
2014/03/06 职场文书
大学生学期自我鉴定
2014/03/19 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python