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

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

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

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

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

6 ответов


вот пример: JSNIPPET DEMO keydown () vs keypress ()

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

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

Примечания:

  1. .keypress() никогда не будет запущен с Shift, Esc и Delete, но .keydown() будет.
  2. на самом деле .keypress() в некоторых браузерах будет срабатывать с помощью клавиш со стрелками, но его не кросс-браузер, так что его более надежным в использовании .keydown().

больше полезной информации

  1. можно использовать .which или .keyCode объекта события-некоторые браузеры не будут поддерживать один из них, но при использовании jQuery его безопасно использовать оба, так как jQuery стандартизирует вещи. (Я предпочитаю .which никогда не было проблем с).
  2. в обнаружить ctrl | alt | shift | META нажмите с фактическим захваченным ключом вы должны проверить следующие свойства объекта события - они будут установлены в TRUE, если они были нажаты:
  3. наконец - вот некоторые полезные коды ( полный список - код ключа-cheatsheet ):

    • Enter: 13
    • Up: 38
    • вниз: 40
    • направо: 39
    • левый: 37
    • Esc: 27
    • пробел: 32
    • Ctrl: 17
    • Alt: 18
    • Shift: 16

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

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

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

  • налево = 37
  • up = 38
  • направо = 39
  • вниз = 40

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

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

jsfiddle demo


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

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

Он говорит:

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

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


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

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

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

$(document).keydown(function(e) {
switch(e.which) {
    case 37:
    $( "#prev" ).click();
    break;

    case 38:
    $( "#prev" ).click();
    break;

    case 39:
    $( "#next" ).click();
    break;

    case 40:
    $( "#next" ).click();
    break;

    default: return;
}
e.preventDefault();

});