2010-10-07 2 views
15

Quindi ho visto alcuni post sui forum su diversi browser che riportano codici chiave differenti, ma tutti sembrano evitare il "perché?".Javascript: diversi codici chiave su diversi browser?

Stavo cercando di catturare i due punti (:) keyCode e ho capito che Firefox riporta e.keyCode 56. Mentre Chrome riporta indietro 186 (penso che sia quello che era).

Esiste un modo universale per ottenere il codice tasto corretto su tutti i browser?

E perché sono diversi se sono le stesse chiavi?

Sarei più curioso di sapere se esiste un modo internazionale per ottenere la stessa pressione dei tasti.

Grazie.

+0

http://www.quirksmode.org/js/keys.html – galambalazs

+1

@galambalazs, questo grafico non rappresenta il colon e il punto e virgola. Il che mi sorprende. PPK è di solito in cima a quel genere di cose. –

+0

http://unixpapa.com/js/key.html ha i due punti e il punto e virgola e sembra abbastanza esauriente. – ruffin

risposta

11

Vedere http://unixpapa.com/js/key.html per una spiegazione del motivo per cui hanno chiavi diverse. Non conosco un modo internazionale per abbinare le chiavi.

+1

La parte conclusiva del collegamento che ho incluso contiene alcune informazioni che possono aiutare a implementare una soluzione universale, dipende solo dalla situazione. –

+0

Bel articolo a cui mi hai collegato. –

11

Dipende se si è interessati a quale tasto fisico l'utente ha premuto o quale carattere è stato digitato dall'utente. Se è il personaggio che stai dopo, è possibile ottenere che affidabile in tutti i principali browser (utilizzando la proprietà della manifestazione keypresswhich nella maggior parte dei browser o keyCode in IE < = 8), ma solo nel caso in keypress. Se si sta cercando la chiave, utilizzare l'evento keydown o keyup ed esaminare la proprietà keyCode, sebbene i mapping esatti dei codici tasto differiscano in qualche modo tra i browser.

Un'eccellente spiegazione e riferimento per tutti gli eventi relativi alla chiave JavaScript è disponibile al numero http://unixpapa.com/js/key.html.

Per rilevare l'utente digita un carattere due punti in modo affidabile in tutti i principali browser, è possibile effettuare le seguenti operazioni:

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

charCode! = KeyCode, tranne per/[A-Z 0-9]/ –

+0

@NathanBubna: lo so. Tuttavia, nel vecchio evento 'keypress' di IE,' keyCode' in modo confuso * è * il codice carattere, non un codice chiave, e tutti gli altri browser mainstream supportano 'which', quindi' keyCode' viene usato solo nel vecchio IE. Leggi tutto su http://unixpapa.com/js/key.html (come collegato alla mia risposta). –

+0

Ick. La vecchia IE colpisce ancora. Grazie per la spiegazione! –

0

Credo che si dovrebbe fare JavaScript per ottenere il codice chiave del ':' carattere, così lo script saprà cosa si trova in un determinato ambiente. Una domanda simile era stata richiesta here, in stackoverflow.

1

Questa è una vecchia domanda. Il modo moderno per farlo è usare event.key. Vedi MDN Key

+1

Questo è ancora il modo corrente, considerando che Key è ancora in bozza e non supportato nella maggior parte dei browser mobili http://caniuse.com/#feat=keyboardevent-key –

+0

adatto a te stesso, non è molto lontano. Vale la pena notare che il browser mobile di gran lunga più popolare, Chrome per Android ha pieno supporto. I trucchi più importanti sono iOS e Safari, sebbene il supporto di Safaris sia disponibile nella prossima versione. Consiglierei l'utilizzo di uno dei tanti polifibri disponibili. – kidconcept

+0

In realtà puoi usarlo. È supportato per i browser più utilizzati. (http://caniuse.com/#feat=keyboardevent-key) Se la proprietà non è definita, puoi comunque utilizzare una piccola funzione di fallback. – CodeBrauer