【问题标题】:how to bind key combination ctrl+x+return in jquery如何在jquery中绑定组合键ctrl+x+return
【发布时间】:2015-06-05 15:56:58
【问题描述】:

有没有办法在 jquery(或 javascript)中捕获组合键 ctrl+x+return,这样如果用户按下这个组合键,调用一个函数。我尝试使用 jquery 热键插件,但没有奏效。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您可能会发现使用KeyboardJS 是一个更好的解决方案。它的大坝使用简单。这里是docs;

    KeyboardJS.on('ctrl + x + enter', function() {
        //do stuff on press
    }, function() {
        //do stuff on release
    });
    

    另外,如果你想在 x 或 enter 之前强制按 ctrl,你可以这样做

    KeyboardJS.on('ctrl > x + enter', function() {
        //do stuff on press
    }, function() {
        //do stuff on release
    });
    

    http://robertwhurst.github.com/KeyboardJS/

    【讨论】:

    • 我尝试了 jquery 热键和捕鼠器,但都没有奏效......似乎有一段时间没有更新了。这最近已更新并且有效!
    【解决方案2】:

    可以使用按键事件对象的ctrlKey属性

    $(document).keypress(function(e) {
        if(e.ctrlKey) {
            // do code to test other keys
        }
    });
    

    同样shift,alt保留键有属性,但是enter键有keyCode 13。

    有什么理由你不能尝试不同的组合 - 例如。 ctrl-alt-x? Enter 键通常保留用于触发网页上的表单提交和其他事件。

    【讨论】:

    【解决方案3】:

    使用全局布尔数组var keys = [] 来检查是否按下了某个键。然后使用以下函数添加全局热键:

    window.addGlobalHotkey = function(callback,keyValues){
        if(typeof keyValues === "number")
            keyValues = [keyValues];
    
        var fnc = function(cb,val){
            return function(e){
                keys[e.keyCode] = true;
                executeHotkeyTest(cb,val);
            };        
        }(callback,keyValues);
        window.addEventListener('keydown',fnc);
        return fnc;
    };
    

    如您所见,它为'keydown' 事件添加了一个新的侦听器。这个监听器会先设置keys中对应的值为true,然后执行一个测试,给定的keyValues当前是否为true。请注意,您不能删除 keys[e.keyCode] = true 并将其放在另一个侦听器中,因为这可能导致错误的回调顺序(首先是热键测试,然后是键映射)。 executeHotkeyTest 本身也很简单:

    window.executeHotkeyTest = function(callback,keyValues){
        var allKeysValid = true;
    
        for(var i = 0; i < keyValues.length; ++i)
            allKeysValid = allKeysValid && keys[keyValues[i]];
    
        if(allKeysValid)
            callback();
    };
    

    最后你必须给keyup添加另一个监听器来清除keys释放的密钥。

    window.addEventListener('keyup',function(e){
        keys[e.keyCode] = false;
    });
    

    现在您可以使用 addGlobalHotkey(callback,[13,17,88]) 为 ctrl+x+enter 添加热键:

    addGlobalHotkey(function(){
        document.body.appendChild(
            document.createElement('div').appendChild(
                document.createTextNode('Ctrl + x + Enter down')
        ).parentNode);
    },[88,13,17]);
    

    JSFiddle demo

    您可以使用全局 [[callback1,values1],[callback2,values2],...] 数组,而不是为每个热键添加侦听器。

    重要提示:在 IE 之前的版本 9 中,您必须使用 attachEvent 而不是 addEventListener。由于您已经在使用 jQuery,您可以改用 .on(...).keydown

    【讨论】:

      【解决方案4】:
      $("body").bind("keydown",keyDown);
      
      function keyDown(e){
          if((e.ctrlKey)&&(e.keyCode == 88)&&(e.keyCode == 13)){
              alert("Keys down are Ctrl + x + Return");
          }
      }
      

      【讨论】:

        【解决方案5】:

        只需像这样输入:

            document.getElementById('yourelementid').onkeydown = function(){
               if(event.ctrlKey===true && event.keyCode==88){
                   //your code goes here
               }
            }
        //no depedency needs. pretty straight-forward
        

        【讨论】:

          猜你喜欢
          • 2012-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-11
          • 1970-01-01
          • 2011-08-23
          • 2019-11-15
          • 2022-01-25
          相关资源
          最近更新 更多