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

есно, что я делаю не так

$(".s").keypress(function(e) {
   switch (e.keyCode) {
      case 8: // Backspace
      //console.log('backspace');
      case 9: // Tab
      case 13: // Enter
      case 37: // Left
      case 38: // Up
      case 39: // Right
      case 40: // Down
         break;

      default:
         doSearch();
   }
});

Я хочу моеdoSearch() функция также будет уволена, когда я ударилвозврат на одну позицию ключ. На данный момент абсолютно ничего не происходит, когда я нажимаювозврат на одну позицию в Chrome и Safari.

есть идеи?

 vsync10 февр. 2013 г., 22:42
он не работает на Chrome, но на Firefox.
 José Manuel Lucas14 янв. 2011 г., 12:11
Вы можете попробовать этот плагин jQuerycode.google.com/p/js-hotkeys и использовать псевдоним ключа «Backspace»

Ответы на вопрос(4)

он не перехватывает непечатаемые символы, поэтому backspace не будет работать при нажатии клавиш, но он попадает в keydown и keyup:

Событие нажатия клавиши отправляется элементу, когда браузер регистрирует ввод с клавиатуры. Это похоже на событие нажатия клавиш, за исключением того, что модификаторы и непечатаемые ключи, такие как Shift, Esc, и удаляют события нажатия клавиш запуска, но не события нажатия клавиш. Другие различия между этими двумя событиями могут возникать в зависимости от платформы и браузера. (https://api.jquery.com/keypress/)

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

jQuery(el).keydown( function() { 
    var that = this; setTimeout( function(){ 
           /** Code that processes backspace, etc. **/ 
     }, 100 );  
 } );

Я сам с этим сталкивался. я использовал.on так что выглядит немного иначе, но я сделал это:

 $('#element').on('keypress', function() {
   //code to be executed
 }).on('keydown', function(e) {
   if (e.keyCode==8)
     $('element').trigger('keypress');
 });

Добавление моей работы здесь. Мне нужно было удалить ssn, набранный пользователем, поэтому я сделал это в jQuery

  $(this).bind("keydown", function (event) {
        // Allow: backspace, delete
        if (event.keyCode == 46 || event.keyCode == 8) 
        {
            var tempField = $(this).attr('name');
            var hiddenID = tempField.substr(tempField.indexOf('_') + 1);
            $('#' + hiddenID).val('');
            $(this).val('')
            return;
        }  // Allow: tab, escape, and enter
        else if (event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
        // Allow: Ctrl+A
        (event.keyCode == 65 && event.ctrlKey === true) ||
        // Allow: home, end, left, right
        (event.keyCode >= 35 && event.keyCode <= 39)) {
            // let it happen, don't do anything
            return;
        }
        else 
        {
            // Ensure that it is a number and stop the keypress
            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) &&       (event.keyCode < 96 || event.keyCode > 105)) 
            {
                event.preventDefault();
            }
        }
    });
 Hoàng Long07 февр. 2013 г., 09:19
не работает с Firefox.
 BishopZ19 сент. 2014 г., 18:38
это работает с Firefox, если вы используете event.which вместо event.keyCodeapi.jquery.com/event.which
Решение Вопроса

keyup вместоkeypress, Это получает все коды клавиш, когда пользователь что-то нажимает

 artfuldev28 авг. 2014 г., 11:39
keydown это лучший вариант для всех ключей
 Aaron Digulla14 янв. 2011 г., 12:11
Почему быkeyup огонь для Backspace, когдаkeypress не будет?
 matt14 янв. 2011 г., 12:28
это тот случай. Keyup запускает Backspace, нажатие клавиши не -> странно. есть ли возможность проверить, нажаты ли две клавиши, например, cmd-c, cmd-v или cmd-a?
 hughes05 апр. 2013 г., 00:12
Проблема с этим ответом заключается в том, что с помощьюkeyup будемсломать цифровую клавиатуру, Знаете ли вы ответ, который позволяет правильно определить любую клавишу на полноценной клавиатуре?
 srcspider22 февр. 2011 г., 14:20
Это на самом деле зависит от ключа. Вы хотите использоватьkeypress заEnter ключ,keydown заBackspace и так далее; в противном случае вы обнаружите, что ваши события в некоторых браузерах работают не так, как вы ожидаете, особенно если вы хотите запретить поведение ключа по умолчанию. Когда вы используете не тот, что произойдет, либо ваше событие вообще не будет записано (как в случае с Backspace), либо вы не сможете предотвратить это; поскольку это уже происходит до того, как ваш код обработки событий попадет к нему.

используйте:

$('.s').bind('input', function(){
  console.log("search!");
  doSearch();
});
 Mark Pieszak - Trilon.io08 янв. 2014 г., 21:24
input также не соблюдает keyCodes. Это тоже не сработает.

Ваш ответ на вопрос