详解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 相关文章推荐
[转]JS宝典学习笔记
Feb 07 Javascript
javascript语句中的CDATA标签的意义
May 09 Javascript
Jquery UI震动效果实现原理及步骤
Feb 04 Javascript
JavaScript 函数replace深入了解
Mar 14 Javascript
javascript中打印当前的时间实现思路及代码
Dec 18 Javascript
文本域中换行符的替换示例
Mar 04 Javascript
javascript实现的右下角弹窗实例
Apr 24 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
Dec 02 Javascript
ES6扩展运算符用法实例分析
Oct 31 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
Nov 15 Javascript
JavaScript中字符串的常用操作方法及特殊字符
Mar 18 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
Sep 18 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
Sony CFR 320 修复改造
2020/03/14 无线电
php实现文件下载(支持中文文名)
2013/12/04 PHP
浅析php单例模式
2014/11/25 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
2015/08/21 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
微信小程序入门教程
2016/11/18 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
浅析python中while循环和for循环
2019/11/19 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
大学生专科毕业生自我评价
2013/11/17 职场文书
国贸专业自荐信范文
2014/03/02 职场文书
网管求职信
2014/03/03 职场文书
篮球赛口号
2014/06/18 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
交通处罚决定书
2015/06/24 职场文书
python编程项目中线上问题排查与解决
2021/11/01 Python