为什么Event Object中存在细微的跨浏览器差异

时间:2010-02-03 23:24:34

标签: javascript events dom javascript-events cross-browser

窗口级别的以下声明:

    var event; // for IE
    var event = "anything"; // for Chrome

将销毁此处使用的事件对象:

    <div onMouseOver = "alert(event.type);">Mouseover Div</div>

Firefox似乎没有逐步宣布。

我意识到声明一个名为“event”的变量是错误的代码,但我对这里的技术差异感到好奇,例如在IE中使用var会将变量重新初始化为null,而Chrome不会使用var声明覆盖,除非明确赋值,并且FF可能会将事件对象完全保留在窗口的var声明范围之外。

这更像是一种好奇心。我在我控制之外的网站上遇到了一个由此造成的错误,我看到的越多,我看到浏览器之间的细微差别。只是想知道是否有人在这里有任何见解。

2 个答案:

答案 0 :(得分:6)

在IE中,eventwindow对象的属性,在事件处理程序函数中用于访问正在处理的事件。在其他浏览器(如Firefox)中,情况是在事件处理程序属性中,属性中的JavaScript代码被调用,就好像它形成了一个函数体,其中传递了一个名为event的参数,该参数对应于正在处理的事件。所以在

<div onmouseover="alert(event.type);">Mouseover Div</div>

鼠标悬停代码实际上是

function(event) {
    alert(event.type);
}

并且event参数会覆盖在包含范围内声明的任何event,而在IE中,它是

function() {
    alert(event.type);
}

并且event标识符被解析为全局对象的属性(即window)。

答案 1 :(得分:5)

IE中的“event”对象是“window”对象的属性;也就是说,它是全球性的。在Firefox中,它是一个构造并传递给事件处理程序的值。

如果你使用jQuery或其他一些框架,通常事件处理支持会将“event”对象规范化为跨浏览器同样工作的东西。