为啥“事件”在 Chrome 中全局可用,但在 FF 中不可用?

Posted

技术标签:

【中文标题】为啥“事件”在 Chrome 中全局可用,但在 FF 中不可用?【英文标题】:Why is 'event' available globally in Chrome but not FF?为什么“事件”在 Chrome 中全局可用,但在 FF 中不可用? 【发布时间】:2015-07-21 10:43:15 【问题描述】:

在解决另一个问题的答案时,出现了一个奇怪的错误,该错误与 event 对象在匿名函数中可用而没有被传入有关。在 Chrome 中,以下工作正常,但 FF 抛出错误。

$(document).ready(function() 
  $("#uspsSideboxTrackingClose").click(function() 
    event.preventDefault();
    console.log(event);
  );
);

铬:

火狐:

ReferenceError: 事件未定义


众所周知

$("#uspsSideboxTrackingClose").click(function(event)  .. 

适用于两种浏览器。 Here 是有问题的代码。这是 Chrome 或 FF 的错误,还是两种浏览器的预期行为?哪个浏览器合适?

【问题讨论】:

你的意思可能是$("#uspsSideboxTrackingClose").click(function(event) ,不是吗? 是的!非常正确。谢谢。 另请注意,我在 IE10 中看到同样的错误 【参考方案1】:

在 IE 中,事件对象 was a global object,(不传递给处理函数)而是作为全局对象访问。您还可以将其作为窗口对象的属性进行访问,例如 window.event

在 FF 和其他浏览器中,事件对象作为参数传递,因为在 FF 中没有名为 event 的全局属性,因此您会收到错误消息。

在 chrome 中,他们添加了对这两个功能的支持,因此您将获取事件对象作为全局引用和参数。

但是由于您使用的是 jQuery,因此 jQuery 会规范化这两种行为,并将始终将事件对象作为参数传递给事件处理程序。

$(document).ready(function () 
    $("#uspsSideboxTrackingClose").click(function (event) 
        event.preventDefault();
        console.log(event);
    );
);

【讨论】:

有道理。他们为什么要这样做? 支持某个功能?我称之为“保持与 M$ 错误的兼容性”。 同样的事情会在 ie 中引发错误,尽管基于全局对象这很奇怪......但是使用 jQuery 这么长时间对我来说似乎很正常 感谢您详细而清晰的回答,也解释了IE。干得好。 您链接到的文档非常过时了。只有非常旧的 Internet Explorer 版本不支持将事件对象作为第一个参数传递给事件处理函数。

以上是关于为啥“事件”在 Chrome 中全局可用,但在 FF 中不可用?的主要内容,如果未能解决你的问题,请参考以下文章