【问题标题】:jQuery hotkeys working for any key, not only for the designatedjQuery 热键适用于任何键,不仅适用于指定的键
【发布时间】:2011-11-03 18:39:26
【问题描述】:

我将此代码添加到我的网站:

$(document).bind('keydown', 'i', function(){
$("#af").click();
return false;});

问题在于它可以与任何键一起使用,而不仅仅是“i”。怎么了?

【问题讨论】:

    标签: jquery key hotkeys


    【解决方案1】:

    在您的代码中,'i' 是一个传递给回调函数的参数。它对您的事件将响应的字符代码没有影响。你可以通过

    $(document).bind('keydown', function(e){
       if (String.fromCharCode(e.keyCode) == 'I') {
          $("#af").click();
          e.preventDefault();
       }
    });
    

    【讨论】:

    • 现在它可以工作了,我写这个是因为我使用的是 jquery.hotkeys 插件github.com/jeresig/jquery.hotkeys
    • 啊,明白了。那是有道理的:)
    • 我从来没有使用过那个插件,但是鉴于它是由 jQuery 的创建者编写的,我猜这不是插件中的错误。如果您在jsfiddle.net 上提供完整的代码示例,那么人们将能够提供帮助。绑定事件时可能未加载插件。如果您对此感兴趣,应该将其作为新问题发布。
    • 上次我检查过,jQuery HotKeys Github 项目页面上的文档与实际行为不符。该插件不是.bind('keydown', 'i', function),而是重载事件命名空间以提供密钥。对于你的例子,你会做bind('keydown.i', function)
    【解决方案2】:

    因为jQuery Doc说:

    event.which 规范了 event.keyCode 和 event.charCode。它是 建议观看 event.which 进行键盘按键输入。更多 详情请阅读event.charCode on the MDC

    那就更好用了

    $(document).bind('keydown', function(e){
        var code = (e.keyCode ? e.keyCode : e.which);
        if (code == 73) {   
            $("#af").click();
            return false;
        }
    });
    

    【讨论】:

      【解决方案3】:

      正确的做法是:

      $(document).bind('keydown', function(e){
          if (e.keyCode =='i') {   
              $("#af").click();
              return false;
          }
      });
      

      【讨论】:

      • keyCode 将是一个数值(例如 i = 73),您需要查找键值对;或使用String.fromCharCode(code)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2015-09-15
      • 2021-10-24
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多