740 Stimmen

jQuery Event Keypress: Welche Taste wurde gedrückt?

Mit jQuery, wie finde ich heraus, welche Taste gedrückt wurde, wenn ich an das keypress-Ereignis binden?

$('#searchbox input').bind('keypress', function(e) {});

Ich möchte eine Übermittlung auslösen, wenn ENTER gedrückt wird.

[Update]

Auch wenn ich die (oder besser: eine) Antwort selbst gefunden habe, scheint es einen gewissen Spielraum für Variationen zu geben ;)

Gibt es einen Unterschied zwischen keyCode y which - vor allem, wenn ich nur auf der Suche nach ENTER der niemals ein Unicode-Schlüssel sein wird?

Bieten einige Browser die eine Eigenschaft und andere die andere?

873voto

Eran Galperin Punkte 84916

Eigentlich ist das besser:

 var code = e.keyCode || e.which;
 if(code == 13) { //Enter keycode
   //Do something
 }

139voto

Vladimir Prudnikov Punkte 6360

Versuchen Sie dies

$('#searchbox input').bind('keypress', function(e) {
    if(e.keyCode==13){
        // Enter pressed... do anything here...
    }
});

61voto

user35612 Punkte 641

Wenn Sie jQuery UI verwenden, haben Sie Übersetzungen für gängige Tastencodes. Unter ui/ui/ui.core.js :

$.ui.keyCode = { 
    ...
    ENTER: 13, 
    ...
};

Es gibt auch einige Übersetzungen in tests/simulate/jquery.simulate.js, aber ich konnte keine in der JS-Kernbibliothek finden. Wohlgemerkt, ich habe lediglich die Quellen gegrapscht. Vielleicht gibt es eine andere Möglichkeit, diese magischen Zahlen loszuwerden.

Sie können auch String.charCodeAt und .fromCharCode verwenden:

>>> String.charCodeAt('\r') == 13
true
>>> String.fromCharCode(13) == '\r'
true

41voto

Frank Schwieterman Punkte 23718

Da Sie jQuery verwenden, sollten Sie unbedingt .which verwenden. Ja, verschiedene Browser setzen verschiedene Eigenschaften, aber jQuery wird sie normalisieren und den .which-Wert in jedem Fall setzen. Siehe Dokumentation unter http://api.jquery.com/keydown/ heißt es:

Um festzustellen, welche Taste gedrückt wurde, können wir das Ereignisobjekt untersuchen, das an die Handler-Funktion übergeben wird. Während Browser unterschiedliche Eigenschaften verwenden, um diese Informationen zu speichern, normalisiert jQuery die Eigenschaft .which, sodass wir sie zuverlässig verwenden können, um den Tastencode abzurufen.

32voto

user184365 Punkte 345

... dieses Beispiel verhindert die Übermittlung von Formularen (was regelmäßig die grundlegende Absicht bei der Erfassung von Tastendrucken #13 ist):

$('input#search').keypress(function(e) {
  if (e.which == '13') {
     e.preventDefault();
     doSomethingWith(this.value);
   }
});

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