Ich habe zwei Funktionen. Wenn die Eingabetaste gedrückt wird, werden die Funktionen korrekt ausgeführt, beim Drücken der Escape-Taste jedoch nicht. Was ist die richtige Nummer für den Escape-Schlüssel?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
javascript
jquery
Shishant
quelle
quelle
document.addEventListener("keydown", e => console.log(e.keyCode))
in Ihre Browserkonsole ein, klicken Sie in das Fenster und drücken Sie die gewünschte Taste.Antworten:
Versuchen Sie es mit dem Keyup-Ereignis :
quelle
keydown
ahmt das native Verhalten nach - zumindest unter Windows, wo das Drücken von ESC oder Zurück in einem Dialogfeld die Aktion auslöst, bevor die Taste losgelassen wird.Anstatt die Keycode-Werte in Ihrer Funktion fest zu codieren, sollten Sie benannte Konstanten verwenden, um Ihre Bedeutung besser zu vermitteln:
Einige Browser (wie FireFox, andere nicht sicher) definieren ein globales
KeyEvent
Objekt, das diese Arten von Konstanten für Sie verfügbar macht. Diese SO-Frage zeigt eine gute Möglichkeit, dieses Objekt auch in anderen Browsern zu definieren.quelle
0x1B
und Enter ist0x0D
, richtig?(Antwort aus meinem vorherigen Kommentar extrahiert )
Sie müssen
keyup
eher als verwendenkeypress
. z.B:keypress
scheint nicht konsistent zwischen Browsern gehandhabt zu werden (probieren Sie die Demo unter http://api.jquery.com/keypress in IE vs Chrome vs Firefox aus. Manchmalkeypress
wird sie nicht registriert und die Werte für 'which' und ' keyCode 'variieren), währendkeyup
konsistent ist.Da es einige Diskussionen über
e.which
vs gabe.keyCode
: Beachten Sie, dass diese.which
der jquery-normalisierte Wert ist und für die Verwendung empfohlen wird:(von http://api.jquery.com/event.which/ )
quelle
keypress
bei der Flucht nicht ausgelöst werden, es richtig machen.keypress
soll nur feuern, wenn der Schlüssel einen Charakter erzeugt, währendkeyup
immer feuert. developer.mozilla.org/en-US/docs/Web/Events/keypressVerwenden Sie diese einfache Funktion, um den Schlüsselcode für einen Schlüssel zu finden:
quelle
27
ist der Code für den Escape-Schlüssel. :) :)quelle
Ihre beste Wette ist
Zusammenfassung
which
ist vorzuziehen alskeyCode
weil es normalisiert istkeyup
ist vorzuziehen, alskeydown
weil das Keydown mehrmals auftreten kann, wenn der Benutzer es gedrückt hält.keypress
Sie diese Option nur, wenn Sie tatsächliche Zeichen erfassen möchten.Interessanterweise verwendet Bootstrap Keydown und KeyCode in seiner Dropdown-Komponente (ab 3.0.2)! Ich denke, es ist dort wahrscheinlich eine schlechte Wahl.
Zugehöriges Snippet aus dem JQuery-Dokument
Weitere interessante Elemente : JavaScript Keypress Library
quelle
Probieren Sie das jEscape- Plugin aus ( Download von Google Drive )
oder Schlüsselcode für Cross-Browser erhalten
Vielleicht können Sie Schalter verwenden
quelle
Ihr Code funktioniert einwandfrei. Es ist höchstwahrscheinlich das Fenster, das nicht fokussiert ist. Ich benutze eine ähnliche Funktion, um Iframe-Boxen usw. zu schließen.
quelle
Ich habe versucht, das Gleiche zu tun, und es hat mich fertig gemacht. In Firefox scheint es so zu sein, dass, wenn Sie versuchen, einige Dinge zu tun, während die Escape-Taste gedrückt wird, die Escape-Taste weiter verarbeitet wird, wodurch alles abgebrochen wird, was Sie versucht haben. Alarm funktioniert gut. Aber in meinem Fall wollte ich in die Geschichte zurückgehen, die nicht funktionierte. Endlich herausgefunden, dass ich die Ausbreitung des Ereignisses erzwingen musste, um zu stoppen, wie unten gezeigt ...
quelle
Um zu erklären, wo andere Antworten nicht haben; Das Problem ist Ihre Verwendung von
keypress
.Vielleicht ist das Ereignis nur falsch benannt, aber
keypress
definiert, um zu feuern, wenn . Dh Text. Was Sie wollen, ist / , das wann immer (vorher oder nachher) ausgelöst wird.when an actual
character
is being inserted
keydown
keyup
the user depresses a
key
. Dh diese Dinge auf der Tastatur.Der Unterschied tritt hier auf, weil
esc
es sich um ein Steuerzeichen handelt (wörtlich "nicht druckbares Zeichen") und daher keinen Text schreibt und somit nicht einmal ausgelöst wirdkeypress
.enter
ist seltsam, denn obwohl Sie es als Steuerzeichen verwenden (dh um die Benutzeroberfläche zu steuern), wird immer noch ein neues Zeilenzeichen eingefügt, das ausgelöst wirdkeypress
.Quelle: Quirksmode
quelle
So erhalten Sie den Hex-Code für alle Zeichen: http://asciitable.com/
quelle
e.keyCode
Senden Sie einfach eine aktualisierte Antwort, die auf MDN als DEPRECATED gilt .e.key
Stattdessen sollten Sie sich für eine Option entscheiden , die saubere Namen für alles unterstützt. Hier ist die relevante Kopie Pastaquelle
Esc
und nicht den StandardEscape
.Eine robuste Javascript-Bibliothek zum Erfassen von Tastatureingaben und eingegebenen Tastenkombinationen. Es hat keine Abhängigkeiten.
http://jaywcjlove.github.io/hotkeys/
Hotkeys versteht die folgenden Modifikatoren: ⇧, shiftoption⌥altctrlcontrolcommand, und ⌘.
Die folgenden Sondertasten können für Verknüpfungen verwendet werden: backspacetab, clear, enter, return, esc, escape, space, up, down, left, right, home, end, pageup, pagedown, del, deleteund f1durch f19.
quelle
Ich habe immer keyup und e.which verwendet, um den Escape-Schlüssel zu fangen.
quelle
Ich weiß, dass diese Frage nach jquery fragt, aber für diejenigen, die jqueryui verwenden, gibt es Konstanten für viele der Schlüsselcodes:
http://api.jqueryui.com/jQuery.ui.keyCode/
quelle