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

标签 javascript dom events 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 声明范围之外。

这更像是一种好奇。我在一个不受我控制的网站上遇到了 IE 中的一个错误,这是由此引起的,我越深入地研究,就越发现浏览器之间的细微差别。只是想知道这里是否有人有任何见解。

最佳答案

在 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)的属性。

关于javascript - 为什么 Event Object 中存在细微的跨浏览器差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2196299/

相关文章:

java - 某些组件不响应事件

javascript - SlideToggle() 无法正常工作

javascript - 如何使用 jquery 检查有效性来验证表单

javascript - 外部链接无法正常工作 html/javascript

javascript - 如何将 jquery 插件附加到动态创建的文本框

javascript - 是否可以从 javascript 访问 SMIL 计时器?

javascript - 动态显示选中的复选框值列表 js/jquery

javascript - 是否仍然需要限制 $(window).scroll()?

c# - 如何从 C# System.Windows.Form.HtmlElement 中提取 *immediate* 文本(即不是子文本)

events - 在 YUI.add 中跟踪 Youtube 播放器的状态