关于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 相关文章推荐
Javascript - HTML的request类
Jan 09 Javascript
JavaScript DOM 学习第三章 内容表格
Feb 19 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
Sep 03 Javascript
让JavaScript中setTimeout支持链式操作的方法
Jun 19 Javascript
AngularJS辅助库browserTrigger用法示例
Nov 03 Javascript
jQuery插件zTree实现删除树节点的方法示例
Mar 08 Javascript
Vue.use源码分析
Apr 22 Javascript
React 子组件向父组件传值的方法
Jul 24 Javascript
Gulp实现静态网页模块化的方法详解
Jan 09 Javascript
用POSTMAN发送JSON格式的POST请求示例
Sep 04 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
Dec 30 Javascript
微信小程序间使用navigator跳转传值问题实例分析
Mar 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 SOCKET编程详解
2015/05/22 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
python实现rsa加密实例详解
2017/07/19 Python
python基础练习之几个简单的游戏
2017/11/10 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
python数字类型math库原理解析
2020/03/02 Python
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
建筑毕业生自我鉴定
2013/10/18 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
技能比武方案
2014/05/21 职场文书
汽车广告策划方案
2014/05/31 职场文书
党员十八大心得体会
2014/09/12 职场文书
法人代表证明书
2014/09/18 职场文书
社会工作专业自荐信
2014/09/26 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
企业百日安全活动总结
2015/05/07 职场文书
初中军训感想
2015/08/07 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js