keydown组合

时间:2010-02-09 13:43:28

标签: jquery

如何用jquery检查是否按下组合键?

假设我只想在同时按下向上和向下箭头键的情况下启动警报。

现在我只是使用:

switch (event.which) {
    case 40:
        alert('down');
        break;
    case 38:
        alert('up');
        break;
    case 37:
        alert('left');
        break;
    case 39:
        alert('right');
        break;
}

4 个答案:

答案 0 :(得分:5)

设置标志。当一个键关闭时,如果它是某个keyCode,请设置标志myKeyIsDown = true。当它出现时,将标志设置为false。当你的第二个键关闭时,如果它是某个keyCode并且你的myKeyIsDown标志为真,那么你有两个键。

答案 1 :(得分:3)

我觉得这很有用:How to detect simultanious two key press from the Javascript ?。 这是纯粹的JavaScript。您还可以更改第一个方法以使用event.which。 没有旗帜。

修复:对于使用向上+向下+ R 的第一种方法,您应该使用此方法:

function KeyPress(e) {
    for (i = 0; i < KPAry.length; i++) {
        if (e == KPAry[i]) {
            return;
        }
    } // for (i=0;i<KPAry.length;i++)

    if (e != 17 && e != 18 && e != 82 && e!=38 && e!=40) {
        KPAry = new Array();
    } else {
        KPAry[KPAry.length] = e;
    }
    if (KPAry.length == 3) {
        if (KPAry[0] == 17 && KPAry[1] == 18 && KPAry[2] == 82) {
            alert('Keys Pressed\nctrl+alt+R ');
        } else if (KPAry[0] == 38 && KPAry[1] == 40 && KPAry[2] == 82) {
            alert('Keys Pressed\nup+down+R ');
        }
        KPAry = new Array();
    } // if (KPAry.length==3)
} // function KeyPress(e)

答案 2 :(得分:2)

您可以尝试使用插件like thisdemo

答案 3 :(得分:1)

在另一个答案的后续跟踪中有一个建议,你可能想要在第二次按键时停止事件的级联,这可以这样做:(当然把你的逻辑放在一起)

/* handle special key press */ 
function checkCptKey(e) 
{ 
    var shouldBubble = true; 
    switch (e.keyCode) 
    { 
        // user pressed the Tab                                                                                                                                         
        case 9: 
            { 
                $(".someSelect").toggleClass("classSelectVisible"); 
                shouldBubble = false; 
                break; 
            }; 
            // user pressed the Enter     
        case 13: 
            { 
                $(".someSelect").toggleClass("classSelectVisible"); 
                break; 
            }; 
            // user pressed the ESC 
        case 27: 
            { 
                $(".someSelect").toggleClass("classSelectVisible"); 
                break; 
            }; 
    }; 
    /* this propogates the jQuery event if true */ 
    return shouldBubble; 
}; 

/* user pressed special keys while in Selector */ 
$(".mySelect").keydown(function(e) 
{ 
    return checkCptKey(e); 
});