【问题标题】:Why is 'event' variable available even when not passed as a parameter?为什么即使没有作为参数传递,“事件”变量也可用?
【发布时间】:2015-10-16 09:36:23
【问题描述】:

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

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

【问题讨论】:

  • 全球 event。在控制台中尝试event
  • 这并不能解释为什么它只适用于某些浏览器/版本
  • @SergeyPauk:这是微软主义。
  • @Amadan 也可以在 chrome 中使用
  • @SergeyPauk:很多微软主义在 Chrome 中工作。事实上,很多标准都来自 IE;仅仅因为微软从不听取任何人的意见并开发出他们想要的新东西,让其他人采用它们或冒着用户页面无法在少数浏览器中运行的风险,从而进一步危及他们的市场份额。

标签: javascript jquery


【解决方案1】:

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

它不是,可靠的。例如,该代码在 Firefox 上会失败。不是并且过去在 Firefox 上会失败。 Microsoft 使用了 global event 变量。 DOM2 将其定义为处理程序的参数。 Chrome 决定将特定于 MS 的代码抛在脑后,两者都做。 很长时间,Firefox 没有。但是出于兼容性原因,全局被标准化为遗留 API (spec | MDN) 并且 Firefox 在 v63 中添加了它,简要地将它放在用户必须启用的标志后面,并且由于 v66 附带它没有标记。

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

【讨论】:

  • 感谢您的信息 :),不知道这个
猜你喜欢
  • 2020-06-22
  • 1970-01-01
  • 2022-08-20
  • 1970-01-01
  • 2020-12-27
  • 2017-10-24
  • 2012-04-20
  • 1970-01-01
相关资源
最近更新 更多