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

joh*_*hue 4 javascript events dom cross-browser dom-events

窗口级别的以下声明:

    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声明范围之外.

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

Tim*_*own 6

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

<div onmouseover="alert(event.type);">Mouseover Div</div>
Run Code Online (Sandbox Code Playgroud)

鼠标悬停代码是有效的

function(event) {
    alert(event.type);
}
Run Code Online (Sandbox Code Playgroud)

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

function() {
    alert(event.type);
}
Run Code Online (Sandbox Code Playgroud)

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


Poi*_*nty 5

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

如果您使用jQuery或其他一些框架,通常事件处理支持会将"event"对象规范化为跨浏览器的相同功能.