【问题标题】:jQuery keydown event event datajQuery keydown 事件事件数据
【发布时间】:2014-10-18 18:16:36
【问题描述】:

我正在从 1.4.2 升级我们应用程序的 jQuery 版本。 我有一大块 JS,我不明白为什么它会起作用,但实际上在 1.4.2 中有效,而不是在 1.4.3+ 中

$(document).bind('keydown', 'f3',
           function (event) {
               alert("f3");
               //Do something
});

在 jQuery 1.4.2 中,此功能仅适用于 F3 并触发事件处理程序。 当我升级到 1.4.3+ 时,任何keydown 都会触发事件处理程序(我认为这是有道理的)。

keydown 事件是否知道使用事件数据并检查按键是否被按下?

任何人都可以帮助我澄清它是否有效,如果不是,为什么这段代码会在 jQuery 1.4.2 中工作? 我查看了发行说明,唯一改变的是为绑定和keydown 事件添加了方法签名。

【问题讨论】:

  • 如果“work”意味着“拦截 F3 键的按下”,我认为这在任何版本的 jQuery 中都不会起作用。
  • 是的,它确实有效,但我不明白为什么会这样:)
  • 嗯,你用的是热键之类的第三方插件吗?
  • 不,非常简单的 jQuery 和 js...
  • .bind() API 从 jQuery 1.0 版本开始就稳定了,三参数版本中的第二个参数一直是用于将数据传递给事件处理程序。现在,如果这里讨论的事件处理程序使用该数据作为要过滤的键码的指示符,那么这将起作用,但库从未隐式地这样做。

标签: javascript jquery jquery-events keydown


【解决方案1】:

是的。事件对象具有有关事件的所有信息。但是你需要使用keyCode和which等属性手动检查F3。

例如,F3 的 keyCode 是 114。所以你可以这样检查:

if(e.keyCode === 114){
  //F3 is pressed
}

它可能仍然对您有用,因为现在,第二个(可选)参数是 eventData,您将传递给 'f3'

【讨论】:

  • 感谢您的回复。是的,这是真的,我的问题是这是不是由我编写的代码,并且恰好在 1.4.2 中工作 - 当按下 F3 时,触发了正确的事件处理程序,所以我想知道为什么它一直工作到现在?
  • @NinaNa 看看我的最后一行
  • 那么 keydown 事件是否知道“自动”获取事件数据并将其解释为与 event.which 进行比较的键?
  • @NinaNa 它具有与事件相关的值,您必须根据自己的方便进行比较。
  • 我明白,但问题是我不比较它,它在 jQuery 1.4.2 中工作
【解决方案2】:

是的,你可以检查 key 属性,你应该这样做:

$(document).keydown(function( event ) {
  if ( event.which == 114 ) { // 114 is the identifier for F3
    //Do some stuff
    event.preventDefault();
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-11
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多