关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级


Posted in Javascript onOctober 14, 2010

假设在我们页面有这么一段标签:

<body> 
<div id="testDiv" style="width:200px;height:200px;background:#c0c0c0;"></div> 
</body>

现在在页面加入这么一段脚本:
<script type="text/javascript"> window.onload=function(){
//在各个层级的元素上绑定事件 

window.onclick=func; 

document.onclick=func; 

document.getElementById("timeDiv").onclick=func; 

document.body.onclick=func; 
} 
function func(){
//响应函数,输出响应的元素 

document.getElementById("timeDiv").innerHTML+=this+"<br>"; 
}

在firefox以及IE 8下打开页面,在标签testDiv(灰色方块)上单击,结果分别如下截图:

关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级

firefox下结果
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级

IE 8下结果

可以看到,两者结果并不相同?究竟为什么会这样呢?
原来是由于IE浏览器以及Firefox对于冒泡型事件的支持层次不同造成的。(如对冒泡事件不是很了解可先查询相关资料)
(1)在IE 6以及后续版本,冒泡事件支持的层级达到document对象。
(2)在firefox(准确的说应该是Mozilla1.0以及更高版本),对冒泡事件的支持一直上升到window窗口对象。
于是就造成了上面事件响应结果的不同。

另外,有个有意思的地方不知道你注意到了没有?就是事件目标的响应顺序。(冒泡事件的响应顺序。。。好像有点废话)我们知道,firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件。在这里明显事件处理函数作用在了冒泡阶段。也就是说,如果我们采用传统的直接给事件处理函数属性赋值的话,比方说:

document.body.onclick=func;

事件处理函数将被添加到事件的冒泡阶段。

以上就是对于IE、firefox里面冒泡事件响应层级的一点介绍,同时顺带介绍了采用传统事件处理函数直接赋值的默认处理。详细的讲解可参见大牛Nicholas C. Zakas所著的《javascript高级程序设计》。

PS:以上内容仅仅为个人读书笔记,如有错漏,随时欢迎指正。同时希望能有更多的前端爱好者们共同分享你们的心得!

Javascript 相关文章推荐
jquery BS,dialog控件自适应大小
Jul 06 Javascript
判断控件是否已加载完成的代码
Feb 24 Javascript
关于COOKIE个数与大小的问题
Jan 17 Javascript
js Map List 遍历使用示例
Jul 10 Javascript
jquery实现通用版鼠标经过淡入淡出效果
Jun 15 Javascript
常用的Javascript数据验证插件
Aug 04 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
May 10 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
Sep 24 Javascript
BootStrap selectpicker后台动态绑定数据
Jun 01 Javascript
自定义vue全局组件use使用、vuex的使用详解
Jun 14 Javascript
微信小程序支付之c#后台实现方法
Oct 19 Javascript
angularjs数组判断是否含有某个元素的实例
Feb 27 Javascript
js限制文本框为整数和货币的函数代码
Oct 13 #Javascript
javascript中&quot;/&quot;运算符常见错误
Oct 13 #Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
Oct 13 #Javascript
理解Javascript_05_原型继承原理
Oct 13 #Javascript
JavaScript 打地鼠游戏代码说明
Oct 12 #Javascript
理解Javascript_03_javascript全局观
Oct 11 #Javascript
理解Javascript_02_理解undefined和null
Oct 11 #Javascript
You might like
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
BootStrap 动态表单效果
2017/06/02 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
给我一面国旗 python帮你实现
2019/09/30 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
HTML5获取当前地理位置并在百度地图上展示的实例
2020/07/10 HTML / CSS
《识字五》教学反思
2014/03/01 职场文书
学生社团文化节开幕式主持词
2014/03/28 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
深入理解Pytorch微调torchvision模型
2021/11/11 Python
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python