为什么"事件"在Chrome中全局可用,而不是FF?

Dra*_*kes 8 javascript jquery global event-handling javascript-events

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

$(document).ready(function() {
  $("#uspsSideboxTrackingClose").click(function() {
    event.preventDefault();
    console.log(event);
  });
});
Run Code Online (Sandbox Code Playgroud)

铬:

在此输入图像描述

火狐:

ReferenceError:未定义事件


众所周知

$("#uspsSideboxTrackingClose").click(function(event) { .. }
Run Code Online (Sandbox Code Playgroud)

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

Aru*_*hny 14

在IE中,事件对象是一个全局对象(不传递给处理函数),但作为全局对象访问.您也可以将其作为窗口对象的属性来访问window.event

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

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

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

$(document).ready(function () {
    $("#uspsSideboxTrackingClose").click(function (event) {
        event.preventDefault();
        console.log(event);
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 支持功能?我称之为"保持与M $ bug的兼容性". (3认同)