2012-03-31 24 views

回答

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當前是否爲真。請注意,您無法刪除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(); 
}; 

最後,你必須到其它監聽從keys添加到keyup清理被釋放的鍵。

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

現在你可以熱鍵添加到CTRL通過addGlobalHotkey(callback,[13,17,88]) + X +輸入:

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

3

您可以使用按鍵下壓事件對象

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

而且SHIFT,ALT鍵保留有屬性的ctrlKey財產,但回車鍵具有鍵代碼13

是否有任何理由,你可以不要嘗試不同的組合 - 例如CTRL-ALT-X?回車鍵通常用於觸發表單提交和網頁上的其他事件。

+0

我看到,也許有一個問題與CTRL-返回組合,特別是跨瀏覽器 - 進一步閱讀這裏:http:// stackoverflow。 com/questions/3532313/jquery-ctrlenter-as-enter-in-text-area – 2012-03-31 09:36:07

2
$("body").bind("keydown",keyDown); 

function keyDown(e){ 
    if((e.ctrlKey)&&(e.keyCode == 88)&&(e.keyCode == 13)){ 
     alert("Keys down are Ctrl + x + Return"); 
    } 
} 
5

您可能會發現使用KeyboardJS是一個更好的解決方案。它的水壩簡單易用。這裏是docs;

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

另外,如果要強制X之前,按CTRL或輸入你能做到這一點,而不是

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

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

+0

我試過jquery hotkeys和mousetrap,都沒有工作......似乎還沒有在一段時間內更新。這已經被最近更新並且工作! – Chris 2017-11-20 17:43:28

1

只是簡單地鍵入如下:

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