Laut MDN sollten wir die Immobilie definitiv nicht nutzen .keyCode
. Es ist veraltet:
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
In der W3-Schule wird diese Tatsache heruntergespielt, und es gibt nur eine Randnotiz, die besagt, dass .keyCode
sie nur aus Kompatibilitätsgründen bereitgestellt wird und dass die neueste Version der DOM-Ereignisspezifikation die Verwendung der .key
Eigenschaft empfiehlt .
Das Problem ist, dass .key
dies von Browsern nicht unterstützt wird. Was sollten wir also verwenden? Fehlt mir etwas?
javascript
key
deprecated
keycode
Jason210
quelle
quelle
.key
wird in allen wichtigen Browser- Entwicklern unterstützt.mozilla.orgAntworten:
Sie haben drei Möglichkeiten, damit umzugehen, da dies auf dem von Ihnen freigegebenen Link steht.
Sie sollten sie in Betracht ziehen, das ist der richtige Weg, wenn Sie browserübergreifende Unterstützung wünschen.
Es könnte einfacher sein, wenn Sie so etwas implementieren.
quelle
Darüber hinaus , dass alle keyCode , die , charCode und keyIdentifier sind veraltet:
charCode
undkeyIdentifier
sind Nicht-Standard - Funktionen.keyIdentifier
wird ab Chrome 54 entfernt und Opera 41.0keyCode
gibt bei einem Tastendruckereignis mit normalen Zeichen in FF 0 zurück.Die Schlüsseleigenschaft :
Zum Zeitpunkt dieses Schreibens wird die
key
Eigenschaft von allen gängigen Browsern ab Firefox 52, Chrome 55, Safari 10.1, Opera 46 unterstützt. Mit Ausnahme von Internet Explorer 11 mit: nicht standardmäßigen Schlüsselkennungen und falschem Verhalten mit AltGraph. Weitere InformationenWenn dies wichtig und / oder abwärtskompatibel ist, können Sie die Funktionserkennung wie im folgenden Code verwenden:
Beachten Sie, dass sich der
key
Wert vonkeyCode
oder denwhich
Eigenschaften darin unterscheidet: Er enthält den Namen des Schlüssels und nicht seinen Code. Wenn Ihr Programm Zeichencodes benötigt, können Sie diese verwendencharCodeAt()
. Für einzelne druckbare Zeichen können Sie verwendencharCodeAt()
, wenn Sie mit Schlüsseln arbeiten, deren Werte mehrere Zeichen enthalten, wie es ArrowUp wahrscheinlich ist: Sie testen auf Sonderschlüssel und ergreifen entsprechende Maßnahmen. So versuchen , eine Tabelle von Schlüsseln Werte der Umsetzung und ihre entsprechenden CodescharCodeArr["ArrowUp"]=38
,charCodeArr["Enter"]=13
,charCodeArr[Escape]=27
... und so weiter, bitte einen Blick auf nehmen Schlüsselwerte und ihre entsprechenden CodesMöglicherweise möchten Sie die Vorwärtskompatibilität in Betracht ziehen, dh die Legacy-Eigenschaften verwenden, solange sie verfügbar sind, und nur dann, wenn sie gelöscht werden, zu den neuen wechseln:
Siehe auch: die
KeyboardEvent.code
Eigenschaft docs und einige weitere Details in dieser Antwort .quelle
charCodeArr
existiert die Funktion nicht. Funktioniert auchcharCodeAt
nicht für alle Werte vone.key
. Für den SchlüsselEnter
/Return
ist beispielsweise der Wert dere.key
Eigenschaft"Enter"
, und die AusführungcharCodeArr
für diese Zeichenfolge gibt den Wert zurück69
(der der ASCII-Code für das Zeichen istE
).TLDR: Ich würde vorschlagen , dass Sie sollten die neue Verwendung
event.key
undevent.code
Eigenschaften anstelle der Erbe diejenigen. IE und Edge unterstützen diese Eigenschaften, unterstützen jedoch noch nicht die neuen Schlüsselnamen. Für sie gibt es eine kleine Polyfüllung, mit der sie die Standardschlüssel- / Codenamen ausgeben können:https://github.com/shvaikalesh/shim-keyboard-event-key
Ich kam zu dieser Frage und suchte nach dem Grund der gleichen MDN-Warnung wie OP. Nach einer weiteren Suche wird das Problem mit
keyCode
klarer:Das Problem bei der Verwendung
keyCode
besteht darin, dass nicht englische Tastaturen unterschiedliche Ausgaben erzeugen können und selbst Tastaturen mit unterschiedlichen Layouts zu inkonsistenten Ergebnissen führen können. Plus, da war der Fall vonWenn Sie die W3C-Spezifikation lesen: https://www.w3.org/TR/uievents/#interface-keyboardevent
Es wird ausführlich beschrieben, was falsch war
keyCode
: https://www.w3.org/TR/uievents/#legacy-key-attributesNachdem wir den Grund für das Ersetzen des alten Schlüsselcodes ermittelt haben, schauen wir uns an, was Sie heute tun müssen:
key
undcode
).quelle
KeyboardEvent.code
. Außerdem sind die Werte fürkey
undcode
browserabhängig. Beide Probleme machenkey
undcode
nicht praktisch in realen Anwendungen zu verwenden.key
oder verwendencode
? Es ist im Allgemeinen ein physischer Schlüssel, kann aber auch von Num Lock und Layout abhängen ... Was ist die beste Vorgehensweise?MDN hat bereits eine Lösung bereitgestellt:
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
quelle
key
ist ein browserspezifischer Zeichenfolgenwert wie"Enter"
oder"ArrowUp"
und es gibt keine standardisierte Möglichkeit, ihn in den entsprechenden Code zu konvertieren. Sie benötigen also noch mehr Boilerplate-Code, um zwischen Schlüssel und Code zu konvertieren.Wenn Sie beispielsweise feststellen möchten, ob auf die Eingabetaste geklickt wurde oder nicht:
Anstatt
Mach es wie
quelle