为什么'事件'变量,即使不作为参数传递也可用

Why is 'event' variable available even when not passed as a parameter?

本文关键字:参数传递 不作为 事件 变量 为什么      更新时间:2023-09-26

我想知道为什么下面的代码在一些浏览器中工作?也就是说,即使没有参数的click()函数,但event变量存在,dosomething方法是在事件触发对象上调用?

$(<selector>).click(function () {
  $(event.target).<dosomething>
});

为什么'event'变量即使不作为参数传递也是可用的?

它不是可靠的。例如,该代码将在Firefox上失败。不是用于在Firefox上失败。Microsoft使用了一个全局 event变量。DOM2将其定义为处理程序的参数。Chrome决定给ms专用代码来点甜头,同时做这两件事。在很长一段时间内,Firefox没有。但是由于兼容性原因,global被标准化为遗留API (spec | MDN), Firefox在v63中添加了它,并将其简单地置于用户必须启用的标志之后,并且由于v66发布时它没有标记。

即使在该代码工作的浏览器上,也要注意event将是一个原始事件对象,而不是jquery增强的对象。这意味着,例如,在IE8上你不能调用event.preventDefault,因为IE8不提供该功能。如果您接受这个参数,jQuery就会这样做,因为jQuery提供了一个具有标准化特性的事件对象,即使浏览器没有这些特性。