Событие нажатия клавиши Jquery игнорирует клавиши со стрелками

У меня есть поле ввода, которое действует как поиск (аналогично facebook). Я использую jquery в событии key-press, который отлично работает. Проблема в том, что я не могу прокручивать список результатов с помощью клавиш со стрелками, каждый раз, когда один из них нажат, результаты поиска регенерируются. Таким образом, можно игнорировать клавиши со стрелками /shift/tab и т.д.

http://jsfiddle.net/UU6KG/

$("#search-form .search-terms").on("keypress", function(){
       $("#search-items #autocom").fadeIn();
    });

Спасибо

Ответ 1

Вам нужно отфильтровать коды клавиш со стрелками (37,38,39,40), попробуйте следующее:

Обратите внимание на function(e) вместо function() - это позволяет захватить событие и, следовательно, key code.

$('#search-form .search-terms').on('keydown', function(e){
    // get keycode of current keypress event
    var code = (e.keyCode || e.which);

    // do nothing if it an arrow key
    if(code == 37 || code == 38 || code == 39 || code == 40) {
        return;
    }

    // do normal behaviour for any other key
    $('#search-items #autocom').fadeIn();
});

Нажмите для списка кодов клавиш

Заметка из документов keypress/keyup/keydown:

Обратите внимание, что keydown и keyup предоставляют код, указывающий, какая клавиша нажата, а нажатие клавиши указывает, какой символ был введен. Например, нижний регистр "a" будет отображаться как 65 с помощью keydown и keyup, но как 97 нажатием клавиши. В верхнем регистре "А" сообщается как 65 по всем событиям. Из-за этого различия при выборе особых нажатий клавиш, таких как клавиши со стрелками,.keydown() или .keyup() - лучший выбор.

Событие keypress работает в почти во всех ситуациях, но разумно использовать keyup или keydown, потому что некоторые браузеры (я думаю, некоторые старые версии Firefox) не обнаруживают определенных ключей, например, клавиши со стрелками, используя событие keypress.

Ответ 2

Я также утверждаю, что вы должны игнорировать другие ключи, которые не должны напрямую приводить к новому запросу. Например, такие клавиши, как shift, scroll-lock и end. После консультации с тем же список кодов клавиш, с которым связался @theyetiman, я придумал это утверждение if, чтобы игнорировать все ключи, которые не имеют значения (примечание swap keypress для keyup, чтобы разрешить захват важных клавиш, таких как backspace):

$('.search-terms').on('keyup', function(ev) {
    if ((ev.keyCode > = 9 && ev.keyCode <= 45) || (ev.keyCode >= 91 || ev.keyCode <= 93) || (ev.keyCode >= 112 || ev.keyCode <= 145)) {
        return;
    }
});

Ответ 3

$(".search-terms").live('keydown',function(event){                  
if(event.which>=37 && event.which<=40)
                {
                    reutrn;

                }