Привязать несколько ключей к событию нажатия клавиши - PullRequest
9 голосов
/ 13 ноября 2010

В настоящее время я использую этот код Javascript kepypress для запуска событий при нажатии клавиш:

$(document).keydown(function(e) {
    switch(e.keyCode) {

    case 39:
        e.preventDefault();
        alert("Arrow Key");
        break;

    case 37:
        e.preventDefault();
        alert("Arrow Key");
    }
});

но мне интересно, могу ли я вместо привязки одного ключа связать комбинацию из двух ключей. Могу ли я сделать что-то вроде:

$(document).keydown(function(e) {
    switch(e.keyCode) { 
        case 39 && 37:
            e.preventDefault();
            alert("Arrow Key");
        break;
    }
});

Ответы [ 3 ]

25 голосов
/ 14 ноября 2010

Если вы хотите проверить несколько клавиш одновременно, вы должны использовать только одну обычную клавишу и одну или несколько клавиш-модификаторов (alt / shift / ctrl), так как вы не можете быть уверены, что две обычные клавиши действительно могут быть нажаты одновременно на пользователе клавиатура (на самом деле их всегда можно нажимать, но компьютер может этого не понять из-за того, что клавиатура подключена).

Вы можете использовать поля e.altKey, e.ctrlKey, e.shiftKey, чтобы проверить, была ли нажата соответствующая клавиша-модификатор.

Пример:

$(document).keydown(function(e) {
    if(e.which == 98 && e.ctrlKey) {
        // ctrl+b pressed
    }
});
3 голосов
/ 13 ноября 2010

Вы можете использовать случай падения:

$(document).keydown(function(e) {
    switch(e.which) { 
        case 39:
        case 37:
            e.preventDefault();
            alert("Arrow Key");
            break;
    }
});

Обратите внимание, что я использую e.which вместо e.keyCode, чтобы он работал во всех браузерах (jQuery автоматически назначает свойство, которое фактически содержит код ключа для e.which).

3 голосов
/ 13 ноября 2010

Почему бы не использовать if вместо switch?

$(document).keydown(function(e) {
    if ((e.keyCode === 37) || (e.keyCode === 39)) {
        e.preventDefault();
        alert("Arrow Key");
    }
});
...