窗口级别的以下声明:
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 声明范围之外。
这更像是一种好奇。我在一个不受我控制的网站上遇到了 IE 中的一个错误,这是由此引起的,我越深入地研究,就越发现浏览器之间的细微差别。只是想知道这里是否有人有任何见解。
最佳答案
在 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
)的属性。
关于javascript - 为什么 Event Object 中存在细微的跨浏览器差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2196299/