codice di accesso e codice

Perché le persone scrivono affermazioni come

e.keyCode ? e.keyCode : e.charCode 

Alcune persone usano anche e.which

Qualcuno potrebbe spiegare per favore?

Gestire gli eventi chiave in modo coerente non è affatto facile.

In primo luogo, ci sono due diversi tipi di codici: i codici della tastiera (un numero che rappresenta il tasto sulla tastiera premuto dall’utente) e i codici carattere (un numero che rappresenta un carattere Unicode). È ansible ottenere in modo affidabile codici carattere nell’evento keypress . Non cercare di ottenere codici carattere per eventi keyup e keydown .

In secondo luogo, si ottengono diversi set di valori in un evento di keypress un keypress su ciò che si ottiene in un evento keyup o keydown .

Raccomando questa pagina come una risorsa utile. In sintesi:

Se sei interessato a rilevare un utente che digita un carattere, utilizza l’evento keypress . IE memorizza in modo bizzarro solo il codice carattere in keyCode mentre tutti gli altri browser lo memorizzano. Alcuni (ma non tutti) browser lo memorizzano anche in charCode e / o keyCode . Un gestore di keypress di esempio:

 function(evt) { evt = evt || window.event; var charCode = evt.which || evt.keyCode; var charStr = String.fromCharCode(charCode); alert(charStr); } 

Se sei interessato a rilevare una chiave non stampabile (come un tasto cursore), usa l’evento keydown . Qui keyCode è sempre la proprietà da usare. Si noti che gli eventi di keyup hanno le stesse proprietà.

 function(evt) { evt = evt || window.event; var keyCode = evt.keyCode; // Check for left arrow key if (keyCode == 37) { alert("Left arrow"); } } 

È una dichiarazione condizionale.

Se il browser supprone e.keyCode, quindi prendi e.keyCode else e.charCode.

È simile a

 var code = event.keyCode || event.charCode 

event.keyCode : restituisce il valore Unicode di una chiave non carattere in un evento di pressione tasto o qualsiasi tasto in qualsiasi altro tipo di evento tastiera.

event.charCode : restituisce il valore Unicode di un tasto carattere premuto durante un evento keypress.

codice chiave e che rappresentano l’effettivo tasto della tastiera premuto sotto forma di un valore numerico. Il motivo per cui entrambi esistono è che keyCode è disponibile in Internet Explorer mentre è disponibile nei browser W3C come FireFox.

charCode è simile, ma in questo caso si recupera il valore Unicode del carattere premuto. Ad esempio, la lettera “A.”

L’espressione JavaScript:

 var keyCode = e.keyCode ? e.keyCode : e.charCode; 

In sostanza dice quanto segue:

Se la proprietà e.keyCode esiste, imposta variabile keyCode sul suo valore. Altrimenti, imposta variabile keyCode sul valore della proprietà e.charCode.

Si noti che il recupero delle proprietà keyCode o charCode in genere comporta la comprensione delle differenze tra i modelli di eventi in IE e in W3C. Alcuni prevedono la scrittura di codice come il seguente:

 /* get the event object: either window.event for IE or the parameter e for other browsers */ var evt = window.event ? window.event : e; /* get the numeric value of the key pressed: either event.keyCode for IE for e.which for other browsers */ var keyCode = evt.keyCode ? evt.keyCode : e.which; 

EDIT : correzioni alla mia spiegazione di charCode come da commenti di Tor Haugen.

Ok, ecco le spiegazioni.

e.keyCode : utilizzato per ottenere il numero che rappresenta il tasto sulla tastiera

e.charCode – un numero che rappresenta il carattere unicode del tasto sulla tastiera

e.which – (jQuery specifico) è una proprietà introdotta in jQuery (DO Not use in plain javascript)

Di seguito è riportato lo snippet di codice per ottenere keyCode e charCode

  

Esempio live di acquisizione di keyCode e charCode in JavaScript .

Io (essendo io stesso la gente) ho scritto questa affermazione perché volevo rilevare la chiave che l’utente ha digitato sulla tastiera su diversi browser.

Ad esempio, in firefox, i caratteri hanno> 0 charCode e 0 keyCode, e tasti come frecce e backspace hanno> 0 keyCode e 0 charCode.

Tuttavia, l’uso di questa affermazione può essere problematico in quanto sono possibili “collisioni”. Ad esempio, se si desidera distinguere tra le chiavi Delete e Period, questo non funzionerà, poiché Delete ha keyCode = 46 e Period ha charCode = 46.

La proprietà event.which viene aggiunta quando si utilizza jQuery per evitare le differenze tra browser. Vedi i documenti .

La proprietà che non sarà definita se non si utilizza jQuery.