JavaScript事件对象详解:DOM与IE兼容性及event属性差异

作者:窗边听雨

时间:2026-10-30

浏览:254

本文深入解析JavaScript中的事件对象event,涵盖DOM标准与IE浏览器的兼容机制。详细对比HTML内联、DOM0级及DOM2级事件处理程序中event参数的获取方式,并重点剖析IE中attachEvent与DOM0模式下event对象引用不一致的原因及代码验证。

文章目录

相关阅读:

JavaScript事件学习小结(五)js中事件类型之鼠标事件

https://www.jb51.net/article/86259.htm

JavaScript事件学习小结(一)事件流

https://www.jb51.net/article/86261.htm

javaScript事件学习小结(四)event的公共成员(属性和方法)

https://www.jb51.net/article/86262.htm

JavaScript事件学习小结(二)js事件处理程序

https://www.jb51.net/article/86264.htm

JavaScript事件学习小结(三)js事件对象

https://www.jb51.net/article/86266.htm

事件对象概述

一、事件对象

1、认识事件对象

在浏览器环境中,事件以event对象的形式存在。当触发特定事件时,系统会自动生成一个包含该事件所有相关信息的event对象。这些信息包括触发事件的元素节点、事件类型以及其他与当前事件相关的特定数据。

例如,在鼠标操作中,event对象会记录鼠标的坐标位置;而在键盘操作中,则会记录被按下键位的详细信息。

尽管所有主流浏览器都支持event对象,但其实现机制存在差异。在DOM标准中,event对象必须作为唯一参数传递给事件处理函数;而在IE浏览器中,event对象则是window对象的一个属性。

HTML内联事件中的event

2、html事件处理程序中event


<input id="btn" type="button" value="click" onclick=" console.log('html事件处理程序'+event.type)"/>

在HTML内联事件处理程序中,浏览器会创建一个包含局部变量event的函数作用域。开发者可以直接通过event关键字访问当前的事件对象。

DOM标准中的事件对象

3、DOM中的事件事件对象

无论是采用DOM0级还是DOM2级的事件处理程序,event对象都会作为参数直接传入事件处理函数中。


<body>
<input id="btn" type="button" value="click"/>
<script>
var btn=document.getElementById("btn");
btn.onclick=function(event){
console.log("DOM0 & click");
console.log(event.type); //click
}
btn.addEventListener("click", function (event) {
console.log("DOM2 & click");
console.log(event.type); //click
},false);
</script>
</body>

IE浏览器中的事件对象机制

4、IE中的事件对象

第一种情况:当通过DOM0级方法(如直接赋值onclick)添加事件处理程序时,event对象作为window对象的一个属性存在,可通过window.event访问。


<body>
<input id="btn" type="button" value="click"/>
<script>
var btn=document.getElementById("btn");
btn.onclick= function () {
var event=window.event;
console.log(event.type); //click
}
</script>
</body>

第二种情况:通过attachEvent()方法添加的事件处理程序,event对象会作为参数传入处理函数中。


<body>
<input id="btn" type="button" value="click"/>
<script>
var btn=document.getElementById("btn");
btn.attachEvent("onclick", function (type) {
console.log(event.type); //click
})
</script>
</body>

然而,在实际应用中存在两个值得探讨的问题:

1、在通过DOM0级方法添加的事件处理程序中,虽然可以传入一个event参数,且其type属性与window.event.type一致,但传入的event参数对象与window.event对象并不相等,这是为何?


btn.onclick= function (event) {
var event1=window.event;
console.log('event1.type='+event1.type); //event1.type=click
console.log('event.type='+event.type); //event.type=click
console.log('event1==event?'+(event==event1)); //event1==event?false
}

2、在使用attachEvent添加的事件处理程序中,传入的event参数与window.event对象也不相同,其原因是什么?


<body>
<input id="btn" type="button" value="click"/>
<script>
var btn=document.getElementById("btn");
btn.attachEvent("onclick", function (type) {
console.log(event.type); //click
console.log("event==window.event?"+(event==window.event)); //event==window.event?false
})
</script>
</body>

以上所述是小编给大家介绍的JavaScript事件学习小结(三)js事件对象的相关知识,希望对大家有所帮助,如果大家想了解更多内容敬请关注本站网站!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章