为啥“事件”在 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 中不可用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 SVG 蒙版动画在 Firefox 中断断续续,但在 Chrome 中却很流畅?

为啥经过身份验证的 CORS 请求的预检 OPTIONS 请求在 Chrome 中有效,但在 Firefox 中无效?

为啥我的 SVG 径向渐变在基于 Chrome 的浏览器中没有显示,但在 Firefox 中显示?

为啥这个 Javascript 库在浏览器中可用,但在 PhoneGap 中不可用?

Cordova - 为啥 $http get 请求在 android 设备上失败但在 chrome 上工作

为啥响应在服务中可用但在组件中未定义? [复制]