jQuery: нажатие клавиши Backspace не сработает?

интересно, что я делаю неправильно:

$('.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() функция также должна быть уволена, когда я нажму Backspace ключ. На данный момент абсолютно ничего не происходит, когда я нажимаю Backspace в Chrome и Safari.

какие идеи?

4 ответов


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


Я сам наткнулся на это. Я использовал .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();
            }
        }
    });

Если вы хотите запустить событие только при изменении вашего ввода, используйте:

$('.s').bind('input', function(){
  console.log("search!");
  doSearch();
});

согласно документации jQuery для .keypress (), он не ловит непечатаемые символы, поэтому backspace не будет работать на keypress, но он пойман в keydown и keyup:

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

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

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