Событие jQuery keypress () не запускается? - PullRequest
37 голосов
/ 29 января 2009

Я пытаюсь вызвать событие при нажатии клавиши курсора вправо и влево с помощью jQuery. Используя следующий код, я могу запускать события на любой из буквенно-цифровых клавиш, но клавиши курсора (вверх, вниз, влево, вправо) ничего не запускают. Я разрабатываю сайт в первую очередь для пользователей IE, потому что это бизнес-приложение. Я что-то здесь не так делаю?

$('document').keypress(function(e){
    switch (e.which) {
        case 40:
            alert('down');
            break;
        case 38:
            alert('up');
            break;
        case 37:
            alert('left');
            break;
        case 39:
            alert('right');
            break;
        default:
            alert('???');  
            }      
});

Ответы [ 5 ]

47 голосов
/ 29 января 2009

e.which не работает в IE, попробуйте e.keyCode , также вы, вероятно, хотите использовать keydown () вместо keypress (), если вы нацеливаетесь на IE.

См. http://unixpapa.com/js/key.html для получения дополнительной информации.

41 голосов
/ 29 января 2009

С помощью jQuery я сделал это таким образом :

function checkKey(e){
     switch (e.keyCode) {
        case 40:
            alert('down');
            break;
        case 38:
            alert('up');
            break;
        case 37:
            alert('left');
            break;
        case 39:
            alert('right');
            break;
        default:
            alert('???');  
            }      
}

if ($.browser.mozilla) {
    $(document).keypress (checkKey);
} else {
    $(document).keydown (checkKey);
}

Кроме того, попробуйте эти плагины, которые выглядят так, как будто они делают всю вашу работу:

http://www.openjs.com/scripts/events/keyboard_shortcuts

http://www.webappers.com/2008/07/31/bind-a-hot-key-combination-with-jquery-hotkeys/

13 голосов
/ 10 июня 2009

У вас есть слово «документ» в строке. Изменение:

$('document').keypress(function(e){

до

$(document).keypress(function(e){
2 голосов
/ 06 августа 2014

Ваш исходный код имеет $ ('document') ... когда он должен иметь $ (document) без кавычек.

2 голосов
/ 29 июля 2009

Конечно, это закрытый вопрос, я хотел бы добавить кое-что к вашему обсуждению

В Mozilla я наблюдал странное поведение для этого кода

$(document).keydown(function(){
//my code 
});

код запускается дважды. При отладке я обнаружил, что на самом деле запускаются два события: «нажатие клавиши» и «нажатие клавиши». Я отключил одно из событий, и код показал мне ожидаемое поведение.

$(document).unbind('keypress');
$(document).keydown(function(){
//my code
});

Это работает для всех браузеров, а также нет необходимости проверять наличие конкретного браузера (если ($. Browser.mozilla) {}).

Надеюсь, это кому-нибудь пригодится

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...