关于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 相关文章推荐
js实现的日期操作类DateTime函数代码
Mar 16 Javascript
js禁止小键盘输入数字功能代码
Aug 01 Javascript
jquery限定文本框只能输入数字即整数和小数
Nov 29 Javascript
Jquery解析json数据详解
Dec 26 Javascript
jquery使用ajax实现微信自动回复插件
Apr 28 Javascript
javascript引用类型指针的工作方式
Apr 13 Javascript
JavaScript DOM 对象深入了解
Jul 20 Javascript
JS Canvas定时器模拟动态加载动画
Sep 17 Javascript
解决Webpack 热部署检测不到文件变化的问题
Feb 22 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
Apr 15 Javascript
Vue简单实现原理详解
May 07 Javascript
Vue图片裁剪组件实例代码
Jul 02 Vue.js
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运行环境教程
2015/02/12 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
JqGrid web打印实现代码
2011/05/31 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
让python json encode datetime类型
2010/12/28 Python
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
Python类的动态修改的实例方法
2017/03/24 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
Python实现的文本编辑器功能示例
2017/06/30 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
港湾网络笔试题
2014/04/19 面试题
综合实践教学反思
2014/01/31 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
初中家长评语大全
2014/12/26 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS