【问题标题】:"event" object is recognized without passing it, in javascript function? [duplicate]在javascript函数中识别“事件”对象而不传递它? [复制]
【发布时间】:2015-05-09 10:53:44
【问题描述】:

点击链接时,我正在调用 javascript 函数

  <a id="eventFiringLink" href="javascript:functionName()">

在按钮代码的另一个位置,我将functionName() 函数绑定为单击事件的侦听器。

 <button id="someButton">

jquery绑定点击事件

$("#someButton").bind('click',functionName);

功能说明如下,

 functionName(e)
 {
      if(event.target.id== "eventFiringLink")
      {
          console.log("do this");
      }
      else
      {
          console.log("do that");
      }
 }

当我点击链接时,我以为我会得到

"TypeError: 无法读取未定义的属性 'target'",

但令我惊讶的是,代码被执行并打印出来了

“这样做”

在控制台中。

这怎么可能?

【问题讨论】:

  • 代码doesn't seem to act 就像你描述的那样。此外,您没有在监听事件,因此无法传递任何事件对象。事件对象也不会从内联附件中自动传递。
  • 对不起,其实我忘了提到代码中的另一个地方,我将functionName绑定为按钮的单击事件的侦听器..
  • 感谢您花时间研究它。我现在已经编辑了问题描述..
  • 为什么你认为代码会TypeError
  • @DavinTryon 如果eventundefined,你会得到这样的结果

标签: javascript events target


【解决方案1】:

您正在访问全局 window.event。对这个对象的支持因浏览器而异。

http://www.quirksmode.org/js/events_access.html

jQuery 传递的参数被规范化以避免这些浏览器不一致,但正如您所意识到的,您并没有访问该参数,因此您获取的是原始全局事件对象。

【讨论】:

  • 谢谢,老实说,这避免了混乱的发生。
【解决方案2】:

您实际上是在访问全局对象的属性,即 window.properties。所以当你访问事件时它实际上是window.event。 但请注意,现代浏览器可能并不都支持这一点,因为这是浏览器事件处理机制的内部机制,建议将事件作为参数。事实上,在大多数跨浏览器库中,访问事件对象的常用方法如下:

if(!e){ e = window.event; }

【讨论】:

    猜你喜欢
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多