【问题标题】:Bind ctrl + u keystroke in jQuery在 jQuery 中绑定 ctrl + u 击键
【发布时间】:2012-11-15 09:00:32
【问题描述】:

我正在尝试在 jQuery 中将 热键 构建到我的 Web 应用程序中。我正在尝试绑定 Ctrl+U 击键。这是我所拥有的:

$(document).keypress(function(e) {
    if(e.ctrlKey && e.which == 117) {
      if($("#nav-user-details").length > 0) {
        $("#nav-user-details").find(".dropdown-menu").toggle();
      }
    }
});

但这不起作用。如何绑定这个按键?

谢谢。

【问题讨论】:

    标签: javascript jquery onkeyup


    【解决方案1】:

    请试试这个 http://jsfiddle.net/TN7GZ/

    Ctrl+U,屏幕会提示。

    这将满足您的需求:)

    代码

    var isCtrl = false;
    document.onkeyup=function(e){
        if(e.which == 17) isCtrl=false;
    }
    document.onkeydown=function(e){
        if(e.which == 17) isCtrl=true;
        if(e.which == 85 && isCtrl == true) {
            //run code for CTRL+U -- ie, whatever!
            alert('CTRL + U stuff');
            return false;
        }
    }
    ​
    

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些即时帮助。正确解释would greatly improve 其教育价值,通过展示为什么这是一个很好的解决问题的方法,并将使其对未来有类似但不相同问题的读者更有用。请edit您的答案添加解释,并说明适用的限制和假设。
    【解决方案2】:

    我很确定 85u 的键码,还是我遗漏了什么?

    如果你也想要 mac 支持(命令键),它可能会变得一团糟。我之前写了一个 sn-p 可能会对你有所帮助,但它涉及浏览器检测(糟糕):

    var cmd = false;
    
    $(document).on('keydown', function(e) {
    
        if(detectMacCommand(e.which)) {
            cmd = true;
            return;
        }
    
        // now detect print (ctr/cmd + p)
        if ( e.which == 85 && ( e.ctrl || cmd ) ) {
            e.preventDefault();
            alert('ctrl/cmd + u');
        }
    
    }).on('keyup', function(e) {
    
        if(detectMacCommand(e.which)) {
            cmd = false;
            return;
        }
    
    });
    
    function detectMacCommand(key) {
        return ( $.browser.mozilla && key == 224 ||
                 $.browser.opera   && key == 17 ||
                 $.browser.webkit  && ( key == 91 || key == 93 ));
    }
    

    演示:http://jsbin.com/afijam/2

    【讨论】:

      【解决方案3】:
      $(document).keypress("u",function(e) {
        if(e.ctrlKey)
          alert("Ctrl+U was pressed!!");
      });
      

      【讨论】:

      • 所以这行得通,但前提是他们先按ctrl,然后按u。有没有办法让它以任何一种方式工作?
      • 当你按 ctrl + 任意键时,这仍然会发出警报
      【解决方案4】:

      您必须使用 keydown 而不是 keypress。 Keypress 不会触发非字符键。

      $(document).keydown(function (e) {
        if (e.ctrlKey && e.which === 81) {
          alert("key pressed");
          return false;
        }
      });
      

      【讨论】:

      • 所以这行不通,e.which 始终只是ctrl 的值。
      • 我在 chrome 中试过了。它在那里工作。使用我使用的确切代码进行编辑。
      【解决方案5】:

      试试这个:

      var prevKey = null;
      $(document).keydown(function (e) {
        var thisKey = e.which;
      
        if (prevKey && prevKey == 17) {
          if (thisKey == 85) {
            // Your code.
          }
        }
      
        prevKey = thisKey;
      });
      

      【讨论】:

      • 感谢您提供此代码 sn-p,它可能会提供一些即时帮助。一个正确的解释would greatly improve 其教育价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有类似但不相同的问题的读者更有用。请edit您的答案添加解释,并说明适用的限制和假设。
      【解决方案6】:

      如果您正在处理 Xhtml 文件并收到错误 The entity must immediately follow the &,那么您应该使用 &&& 而不是 &&

      【讨论】:

      • 虽然这可能是解决问题的宝贵提示,但一个好的答案也可以证明解决方案。请edit 提供示例代码来说明您的意思。或者,考虑将其写为评论。
      猜你喜欢
      • 2012-12-27
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多