Ich dachte, dies würde irgendwo auf Stack Overflow beantwortet, aber ich kann es nicht finden.
Wenn ich auf ein Tastendruckereignis warte, sollte ich verwenden .keyCode
oder .which
feststellen, ob die Eingabetaste gedrückt wurde?
Ich habe immer so etwas gemacht:
$("#someid").keypress(function(e) {
if (e.keyCode === 13) {
e.preventDefault();
// do something
}
});
Aber ich sehe Beispiele, die .which
anstelle von verwenden .keyCode
. Was ist der Unterschied? Ist einer browserübergreifender als der andere?
javascript
jquery
ScottE
quelle
quelle
Antworten:
Hinweis: Die folgende Antwort wurde im Jahr 2010 geschrieben. Hier viele Jahre später werden beide
keyCode
undwhich
zugunsten vonkey
(für den logischen Schlüssel) undcode
(für die physische Platzierung des Schlüssels) veraltet . Beachten Sie jedoch, dass der IE keine Unterstützungcode
bietet und die Unterstützung fürkey
eine ältere Version der Spezifikation basiert und daher nicht ganz korrekt ist. Während ich dies schreibe, wird der aktuelle Edge, der auf EdgeHTML und Chakra basiert, ebenfalls nicht unterstütztcode
, aber Microsoft führt seinen Blink- und V8- basierten Ersatz für Edge ein, der dies vermutlich tut / wird.Einige Browser verwenden
keyCode
, andere verwendenwhich
.Wenn Sie jQuery verwenden, können Sie es zuverlässig verwenden,
which
da jQuery die Dinge standardisiert . Mehr hier.Wenn Sie jQuery nicht verwenden, können Sie Folgendes tun:
Oder alternativ:
... die die Möglichkeit behandelt, die
e.which
möglicherweise besteht0
(indem Sie diese0
am Ende mithilfe des merkwürdig leistungsstarken||
Operators von JavaScript wiederherstellen ).quelle
var key = event.which || event.keyCode;
Das wird verwendet,event.which
wenn es definiert und nicht falsch ist oderevent.keyCode
wennwhich
es undefiniert oder falsch ist. Technisch sollte ich es wahrscheinlich tun,var key = typeof event.which === "undefined" ? event.keyCode : event.which;
aber wenn es soevent.which
ist0
(kann es sein0
?), Ist es unwahrscheinlich, dass ich mich um die Art von Dingen kümmere, die ich tue.which
, was meiner Meinung nach nur von jQuery bereitgestellt wird, aber ich bin nicht 100% sicher, aber es sollte Ihnen den Einstieg erleichtern Unterschiede in den Browsern)which
wirdkeypress
von allen Browsern außer IE bereitgestellt . Und der Quirksmode ist hier nicht maßgebend. Als Referenz ist der Link, den @TJ Crowder gepostet hat, viel besser: unixpapa.com/js/key.html .which
Eigenschaft des Ereignisses kann Null sein, und dies kann für die meisten Anwendungen einen großen Unterschied bedeuten. Beispielsweise haben nicht druckbare Schlüssel in Firefox diewhich
Eigenschaft Null und dieselbekeyCode
Eigenschaft wiekeydown
. Die Home-Taste hatkeyCode
auf meinem PC in Firefox eine 36, was der Zeichencode für "$" ist. Dies würde es unmöglich machen, zwischen dem Benutzer, der die Home-Taste drückt, und dem Benutzer, der ein $ -Zeichen mit eingibt, zu unterscheidenevent.which || event.keyCode
.jQuery Normalisiert
event.which
je nachdem , obevent.which
,event.keyCode
oderevent.charCode
wird vom Browser unterstützt:Ein zusätzlicher Vorteil von
.which
ist, dass jQuery dies auch für Mausklicks tut:quelle
var key = event.which || event.charCode || event.keyCode
event.wich == null && ...
nur auf null oder undefiniert. Ihrevent.wich || ...
Test auf Falschheit (undefiniert, null, falsch, 0, '' usw.)0
. Und ich glaube nicht, dass es nach etwas sucht""
oder[]
weh tut.Wenn Sie in Vanille-Javascript bleiben, beachten Sie bitte, dass keyCode jetzt veraltet ist und gelöscht wird:
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
Verwenden Sie stattdessen entweder: .key oder .code, je nachdem, welches Verhalten Sie möchten: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code https://developer.mozilla.org/en -US / docs / Web / API / KeyboardEvent / key
Beide sind in modernen Browsern implementiert.
quelle
key
anstelle von zu verwendencode
. Wenn Sie beispielsweise eine Tastatur mit Mediensteuertasten haben, wird durch Drücken von Wiedergabe / Pause "MediaPlayPause" fürkey
und "" für ausgegebencode
.Schauen Sie sich das an: https://developer.mozilla.org/en-US/docs/Web/API/event.keyCode
In einem Tastendruckereignis wird der Unicode-Wert der gedrückten Taste entweder in der Eigenschaft keyCode oder charCode gespeichert, niemals in beiden. Wenn die gedrückte Taste ein Zeichen erzeugt (z. B. 'a'), wird charCode auf den Code dieses Zeichens gesetzt, wobei die Groß- und Kleinschreibung berücksichtigt wird. (dh charCode berücksichtigt, ob die Umschalttaste gedrückt gehalten wird). Andernfalls wird der Code der gedrückten Taste in keyCode gespeichert. keyCode wird immer in den Keydown- und Keyup-Ereignissen festgelegt. In diesen Fällen wird charCode niemals festgelegt. Um den Code des Schlüssels unabhängig davon abzurufen, ob er in keyCode oder charCode gespeichert wurde, fragen Sie die Eigenschaft which ab. Über einen IME eingegebene Zeichen werden nicht über keyCode oder charCode registriert.
quelle
Ich würde
event.key
derzeit empfehlen . MDN-Dokumente: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyevent.KeyCode
undevent.which
beide haben böse veraltete Warnungen oben auf ihren MDN-Seiten:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode https://developer.mozilla.org/en-US / docs / Web / API / KeyboardEvent / which
Für alphanumerische Schlüssel
event.key
scheint in allen Browsern identisch implementiert zu sein. Für Steuerschlüssel (Tab, Eingabe, Escape usw.) giltevent.key
für Chrome / FF / Safari / Opera derselbe Wert, in IE10 / 11 / Edge jedoch ein anderer Wert (IEs verwenden anscheinend eine ältere Version der Spezifikation, stimmen jedoch überein vom 14. Januar 2018).Für alphanumerische Schlüssel würde ein Scheck ungefähr so aussehen:
Für Steuerzeichen müssten Sie Folgendes tun:
Ich habe das Beispiel hier verwendet, um es in mehreren Browsern zu testen (ich musste es in Codepen öffnen und bearbeiten, damit es mit IE10 funktioniert): https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/ Code
event.code
wird in einer anderen Antwort als eine Möglichkeit erwähnt, aber IE10 / 11 / Edge implementiert es nicht, so dass es aus ist, wenn Sie IE-Unterstützung wünschen.quelle
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:
⇧
,shift
,option
,⌥
,alt
,ctrl
,control
,command
, und⌘
.Die folgenden Sondertasten können für Verknüpfungen verwendet werden:
backspace
,tab
,clear
,enter
,return
,esc
,escape
,space
,up
,down
,left
,right
,home
,end
,pageup
,pagedown
,del
,delete
undf1
durchf19
.quelle
event.keyCode
.In Firefox funktioniert die keyCode-Eigenschaft beim Ereignis onkeypress nicht (gibt nur 0 zurück). Verwenden Sie für eine browserübergreifende Lösung die Eigenschaft which zusammen mit keyCode, z.
quelle