210 Stimmen

jQuery: keyPress Backspace wird nicht ausgelöst?

Ich frage mich, was ich falsch mache:

$(".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();
   }
});

Ich möchte meine doSearch() Funktion auch ausgelöst werden soll, wenn ich auf die Backspace Taste. Im Moment passiert absolut nichts, wenn ich die Backspace in Chrome und Safari.

Irgendwelche Ideen?

363voto

Jonathon Bolster Punkte 15681

使用方法 keyup anstelle von keypress . Damit werden alle Tastencodes abgerufen, wenn der Benutzer etwas drückt

36voto

Rob Punkte 341

Ich bin selbst darauf gestoßen. Ich benutzte .on deshalb sieht es ein bisschen anders aus, aber ich habe das gemacht:

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

Ich füge mein Work Around hier hinzu. Ich brauchte, um ssn von Benutzer eingegeben zu löschen, so dass ich dies in jQuery tat

  $(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();
            }
        }
    });

11voto

Marcos Nunes Punkte 1115

Wenn Sie das Ereignis nur bei Änderungen Ihrer Eingaben auslösen wollen, verwenden Sie:

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

8voto

Halcyon Punkte 1328

Nach der jQuery-Dokumentation für .keypress(), es nicht fangen nicht druckbare Zeichen, so Backspace wird nicht auf keypress arbeiten, aber es ist in keydown und keyup gefangen:

Das Ereignis "keypress" wird an ein Element gesendet, wenn der Browser eine Tastatureingabe registriert. Es ähnelt dem Tastendruck-Ereignis, mit der Ausnahme, dass Modifikatoren und nicht druckende Tasten wie Umschalt-, Esc- und Entf-Taste Tastendruck-Ereignisse auslösen, nicht aber Tastendruck-Ereignisse. Weitere Unterschiede zwischen den beiden Ereignissen können je nach Plattform und Browser auftreten. ( https://api.jquery.com/keypress/ )

In manchen Fällen ist Keyup nicht erwünscht oder hat andere unerwünschte Auswirkungen und Keydown ist ausreichend, so dass eine Möglichkeit, dies zu handhaben, die Verwendung von keydown um alle Tastenanschläge abzufangen und dann ein kurzes Zeitintervall festzulegen, in dem die Taste eingegeben wird, um danach die Verarbeitung vorzunehmen.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X