Клавиши со стрелками клавиш jQuery

Я пытаюсь захватить нажатия клавиш со стрелками в jQuery, но никаких событий не запускается.

$(function(){
    $('html').keypress(function(e){
        console.log(e);
    });
});

Это генерирует события для буквенно-цифровых клавиш, но удаление, клавиши со стрелками и т.д. не генерируют никакого события.

Что я делаю неправильно, чтобы не захватывать их?

Ответ 1

Вот пример: JSnippet DEMO keydown() vs keypress()

Вы должны использовать .keydown(), потому что .keypress() игнорирует "стрелки", для того, чтобы поймать тип ключа, используйте e.which

Нажмите экран результатов для фокусировки (внизу справа на экране скрипки), а затем нажмите клавиши со стрелками, чтобы увидеть, как он работает.

Примечания:

  • .keypress() никогда не будет запущен с помощью Shift, Esc и delete, но .keydown() будет.
  • Фактически .keypress() в каком-то браузере будет запускаться клавишами со стрелками, но это не перекрестный браузер, поэтому его более надежный способ использовать .keydown().

Дополнительная полезная информация

  1. Вы можете использовать .which or .keyCode объекта события. Некоторые браузеры не поддерживают один из них, но при использовании jQuery его безопасно использовать оба, поскольку jQuery стандартизирует все. (Я предпочитаю, чтобы .which никогда не сталкивался с проблемой).
  2. Если вы хотите обнаружить нажатие ctrl/alt/shift с помощью фактического захваченного ключа, вы должны проверить свойства .ctrlKey, .altKey и .shiftKey объекта события - они будут ИСТИНА, если они были использованы.
  3. Наконец, вот некоторые полезные коды клавиш (Полный список - keycode-cheatsheet):

    • Введите: 13
    • Вверх: 38
    • Вниз: 40
    • Вправо: 39
    • Слева: 37
    • Esc: 27
    • SpaceBar: 32
    • Ctrl: 17
    • Alt: 18
    • Сдвиг: 16

Ответ 2

$(document).keydown(function(e) {
    console.log(e.keyCode);
});

События Keypress обнаруживают клавиши со стрелками, но не во всех браузерах. Поэтому лучше использовать keydown.

Это коды ключей, которые вы должны получать в своем консольном журнале:

  • left = 37
  • up = 38
  • right = 39
  • down = 40

Ответ 3

Вы можете проверить, нажата ли клавиша со стрелкой:

$(document).keydown(function(e){
    if (e.keyCode > 36 && e.keyCode < 41) 
      alert( "arrowkey pressed" );          
});

jsfiddle demo

Ответ 4

Пожалуйста, обратитесь к ссылке из JQuery

http://api.jquery.com/keypress/

В нем говорится

Событие нажатия клавиши отправляется элементу, когда браузер регистрирует ввод с клавиатуры. Это похоже на событие keydown, за исключением того, что модификаторы и непечатаемые клавиши, такие как Shift, Esc и delete, запускают события смены ключа, но не события нажатия клавиш. Другие различия между этими двумя событиями могут возникать в зависимости от платформы и браузера.

Это означает, что вы не можете использовать keypress в случае стрелок.

Ответ 5

$(document).on( "keydown",  keyPressed);

function keyPressed (e){
    e = e || window.e;
    var newchar = e.which || e.keyCode;
    alert(newchar)
}