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

时间:2015-10-16 09:36:23

标签: javascript jquery

我想知道为什么以下代码在某些浏览器中有效?即即使click()函数没有参数,但event变量存在,并且在事件触发器对象上调用dosomething方法?

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

1 个答案:

答案 0 :(得分:18)

  

为什么即使未作为参数传递,'event'变量也可用?

不可靠。例如,该代码将在Firefox上失败。

Microsoft使用全局 func valueForKey(_ key: String) throws -> AnyObject? 变量。 DOM2将其定义为处理程序的参数。 Chrome决定将特定于MS的代码作为一个骨头并同时执行这两项操作。 Firefox没有。

即使在代码工作的浏览器上,请注意event将是一个原始事件对象,而不是jQuery增强的对象。这意味着,例如,在IE8上,您无法调用event,因为IE8不提供该功能。 jQuery如果你接受了这个参数,因为jQuery提供了一个具有标准化功能的事件对象,即使在缺少这些功能的浏览器上也是如此。