Javascript-Ereignis e.which?

70

Was ist die Funktionalität des Javascript-Ereignisses e.which? Bitte kurz mit Beispiel.

minil
quelle
42
Zwei Jahre später hatte ich Probleme, diese Eigenschaft zu verstehen, nachdem ich mehrere Seiten an anderer Stelle gelesen hatte. Dann bin ich über diesen alten Beitrag gestolpert und habe ihn bekommen. Also, zu @Reigel, überlegen Sie es sich vielleicht noch einmal, bevor Sie jemandem etwas zu Google sagen. Vielleicht haben sie es schon getan. Das ist nicht der Zweck von SO.
temporärer_Benutzername
@ Aerovistae, zu diesem Zeitpunkt würde die Suche bei Google Ihnen so etwas wie quirksmode.org/js/events_properties.html geben ... was bereits sehr hilfreich ist ...
Reigel
Die Antwort von Tim Down ist im Moment so viel besser als die akzeptierte Antwort.
Toskan
4
@JuanMendes - Googeln "Javascript event.which" hat mich als erstes Ergebnis hierher gebracht. Ist das etwas, was Sie für "unerwünscht" halten? Ich meine, es hört sich so an, als würden Sie lieber, dass die Frage hier nie gestellt / beantwortet wurde.
Kevin Fegan

Antworten:

66

e.whichist kein Ereignis, whichist eine Eigenschaft des eventObjekts, die die meisten Leute als ein ihren Ereignishandlern bezeichnen. Es enthält den Tastencode der Taste, die zum Auslösen des Ereignisses gedrückt wurde (z. B. Tastendruck, Tastendruck).

document.onkeypress = function(myEvent) { // doesn't have to be "e"
    console.log(myEvent.which);
};

Mit diesem Code druckt die Konsole den Code jeder Taste aus, die Sie auf der Tastatur drücken.

Verfallserklärung

KeyboardEvent.was veraltet ist. Bitte suchen Sie nach Alternativen wie KeyboardEvent.key . Lesen Sie den vollständigen API hier .

nickf
quelle
1
Es erfordert nicht wirklich Firebug, sondern nur eine Art console.log (das viel mehr als Firebug bietet, zum Beispiel das Webkitt-ens).
Npup
1
whichist auch für Mausereignisse vorhanden, und Ihr Beispiel funktioniert nicht für den IE, in dem ein Ereignishandler keinen Ereignisparameter empfängt.
Tim Down
3
Nur ein weiterer Hinweis zur Hilfe für alle, die dies finden (wird auch auf anderen Fragen veröffentlicht). Ich habe einen Beitrag in jQuery-Foren verfasst, in dem eine gute Mehrheit der e.which-Codes und der zugehörigen Schlüssel aufgeführt ist. Der Beitrag ist hier -> forum.jquery.com/topic/eventwhich-code-list-just-for-help
SpYk3HH
KeyboardEvent.was veraltet ist. Bitte suchen Sie nach Alternativen wie KeyboardEvent.key . Sehen Sie hier mehr .
Crimson_king
80

whichist eine Eigenschaft von EventObjekten. Es ist in den meisten Browsern für schlüssel- und mausbezogene Ereignisse definiert, in beiden Fällen jedoch nicht im IE (vor Version 9).

Gibt bei mausbezogenen Ereignissen whichdie betroffene Maustaste an. Für IE <9 wird der äquivalente Wert in gefunden window.event.button. Um die buttonSache zu verkomplizieren, unterstützen Nicht-IE-Browser auch eine Eigenschaft von Mausereignissen, die manchmal einen anderen Wert als melden which. Außerdem haben Browser manchmal unterschiedliche Werte für dieselbe Schaltfläche oder Kombination von Schaltflächen. Wenn Sie sich an die Verwendung whichin allen Browsern halten, die dies unterstützen, und buttonin IE <9, besteht die einzige Konstante darin, dass ein Wert von 1 immer bedeutet, dass die linke Maustaste beteiligt war (wenn auch nicht unbedingt allein).

document.onmousedown = function(e) {
    e = e || window.event;
    var button = (typeof e.which != "undefined") ? e.which : e.button;
    if (button == 1) {
        alert("Left mouse button down");
    }
};

Für eine vollständige Analyse empfehle ich Jan Wolters Artikel über JavaScript-Mausereignisse .

Für die Schlüsselbezogene Ereignisse, whichbezieht sich auf die Taste , die gedrückt wurde. Für keydownund keyupEreignisse ist dies relativ einfach: Es ist der Schlüsselcode für die gedrückte Taste und gibt denselben Wert wie die keyCodeEigenschaft des Ereignisses zurück . Da alle Browser die keyCodeEigenschaft unterstützen und IE <9 nicht unterstützt which, sollten Sie im Allgemeinen keyCodefür keydownund keyupEreignisse verwenden.

Bei keypressVeranstaltungen ist die Situation komplizierter. Bei druckbaren Zeichentasten whichist der Zeichencode für die gedrückte Taste und wird in mehr Browsern als der charCodeEigenschaft unterstützt. In IE <9 ist das Äquivalent wieder die keyCodeEigenschaft. Um das eingegebene Zeichen zu erkennen, ist das Folgende ein browserübergreifender Ansatz. Beachten Sie, dass der folgende Code nicht für nicht druckbare Tasten wie Pfeiltasten verwendet werden sollte, die Sie stattdessen im folgenden keydownFall erkennen sollten :

document.onkeypress = function(e) {
    e = e || window.event;
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
    if (charCode) {
        alert("Character typed: " + String.fromCharCode(charCode));
    }
};

Für weitere Details empfehle ich den Artikel von Jan Wolter über JavaScript-Schlüsselereignisse

Tim Down
quelle
5
@Toskan: Die akzeptierte Antwort wurde einige Stunden vor meiner veröffentlicht und wurde möglicherweise akzeptiert, bevor ich meine gepostet habe.
Tim Down
2
OP enttäuscht Tim, indem er dies nicht als Antwort akzeptiert! :)
Sohaiby
10

Diese Funktion wurde aus den Webstandards entfernt. Obwohl einige Browser dies möglicherweise noch unterstützen, wird es gerade gelöscht. Verwenden Sie es nicht in alten oder neuen Projekten. Seiten oder Web-Apps, die es verwenden, können jederzeit beschädigt werden.

Sie sollten KeyboardEvent.keystattdessen verwenden, wenn es verfügbar ist.

http://codepen.io/KevinOrfas/pen/QKbKAd

KevinOrfas
quelle
2
KeyboardEvent.keyzurückkehren wird „die Kennung des Schlüssels (Zeichen)“ , während KeyboardEvent.whichzurückkehren wird „um die numerische keyCode“ .
CSR-Nontol
5

Während einer Veranstaltung e:

e.which

ist dasselbe wie:

e.keyCode

Mit beiden Funktionen können Sie den Schlüsselcode der Taste abrufen, die während eines Tastendruck-, Tastendruck- oder Tastendruckereignisses gedrückt wurde

Viele Leute verwenden ||(ODER), um sicherzustellen, dass ihr Code in Browsern funktioniert, die welche Eigenschaft nicht unterstützen. Schauen Sie sich den folgenden Code an:

document.onkeypress = function(e) {
   var key = e.which || e.keyCode;
   alert(key);
}
Sayanjyoti Das
quelle