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

IT技术 javascript jquery javascript-events event-handling global
2021-02-24 14:52:55

在为另一个问题寻找答案时,出现了一个奇怪的错误,该错误与event匿名函数中对象可用而无需传入有关。在 Chrome 中,以下工作正常,但 FF 会引发错误。

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

铬合金:

在此处输入图片说明

火狐:

参考错误:事件未定义


据了解,

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

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

1个回答

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

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

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

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

$(document).ready(function () {
    $("#uspsSideboxTrackingClose").click(function (event) {
        event.preventDefault();
        console.log(event);
    });
});
感谢您详细而清晰的回答,也解释了 IE。做得好。
2021-04-24 14:52:55
说得通。他们为什么要这样做?
2021-05-09 14:52:55
同样的事情也会在 ie 中引发错误,尽管这很奇怪基于全局对象......但是使用 jQuery 这么长时间对我来说似乎很正常
2021-05-09 14:52:55
您链接到的文档非常过时。只有非常旧版本的 Internet Explorer 不支持将事件对象作为第一个参数传递给事件处理函数。
2021-05-12 14:52:55
支持一个功能?我称之为“保留与 M$ 错误的兼容性”。
2021-05-15 14:52:55