窗口级别的以下声明:
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声明范围之外。
这更像是一种好奇心。我在我控制之外的网站上遇到了一个由此造成的错误,我看到的越多,我看到浏览器之间的细微差别。只是想知道是否有人在这里有任何见解。
答案 0 :(得分:6)
在IE中,event
是window
对象的属性,在事件处理程序函数中用于访问正在处理的事件。在其他浏览器(如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”对象规范化为跨浏览器同样工作的东西。