如何在jquery中绑定组合键ctrl + x + return

use*_*683 7 javascript jquery

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

Rob*_*rst 5

您可能会发现使用KeyboardJS是一个更好的解决方案.它的大坝简单易用.这是文档 ;

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

此外,如果您想强制在x之前按ctrl或输入,您可以改为执行此操作

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

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


Zet*_*eta 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;
};
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它向'keydown'事件添加了一个新的侦听器。该监听器首先将相应的值设置为keystrue,然后执行测试,判断给定的值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();
};
Run Code Online (Sandbox Code Playgroud)

最后,您必须添加另一个侦听器来keyup清除已释放的密钥keys

window.addEventListener('keyup',function(e){
    keys[e.keyCode] = false;
});
Run Code Online (Sandbox Code Playgroud)

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

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

JSFiddle 演示

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

重要提示:在 IE 9 之前的版本中,您必须attachEvent使用addEventListener. 由于您已经在使用 jQuery,因此您可以使用.on(...)or.keydown代替。