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


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

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

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

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

6 58

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. To обнаружить ctrl | alt | shift | META нажмите с фактическим захваченным ключом вы должны проверить следующие свойства объекта события - они будут установлены в TRUE, если они были нажаты:
  3. наконец - вот некоторые полезные коды ( полный список - keycode-cheatsheet):

    • введите: 13
    • вверх: 38
    • вниз: 40
    • направо: 39
    • левый: 37
    • Esc: 27
    • пробел: 32
    • Ctrl: 17
    • Alt: 18
    • сдвиг: 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, запускают события 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();

});