2012-04-17 7 views
31

Ok, qual è la differenza in .keypress e .keydown/.keyup? Attualmente sto usando .keydown che restituisce un valore .which di 38 per la mia chiave, ora se lo cambio in .keypress restituisce un valore di 109 per quella stessa chiave. Qual è la differenza e perché i valori sono diversi per la stessa chiave?jQuery .keypress & .keydown .which

+0

quale browser stai utilizzando? – Mathletics

+0

I diversi browser dovrebbero dare luogo a diversi eventi che non sono comandi chiave diversi – SpYk3HH

+0

Ho un oggetto JSON con ogni evento chiave e ciascuno diviso per browser, lo posterò anche io un violino molto veloce con tutte e tre le pressioni dei tasti e possiamo verificarlo , gimmie come 10 minuti – SpYk3HH

risposta

2

KeyPress accade dopo KeyDown. Quindi puoi usare KeyDown per determinare quale chiave è, quindi KeyPress per disabilitare quel personaggio.

14

si dovrebbe leggere il seguente post: http://javascript.info/tutorial/keyboard-events

keydown scattare su ogni pressione di un tasto e dà scan-code. Trigger della chiave dopo il keydown e fornisce il char-code, ma è garantito solo per i caratteri.

21

Sarò d $%^@ d, c'è davvero una differenza con la pressione di un tasto e in tutto questo tempo non l'ho mai realizzato. lol

Vedi il mio violino e provare qualcosa di simile la lettera "r"

http://jsfiddle.net/SpYk3/NePCm/

In qualche modo non ho mai prestato attenzione a questo

Trovato maggiori informazioni:

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

"Le due proprietà sono keyCode e charCode. Metti (troppo) semplicemente, keyCode dice qualcosa sull'effettivo tasto della tastiera che l'utente ha premuto, mentre charCode fornisce il valore ASCII del carattere risultante. Questi bit di informazioni non devono essere uguali; ad esempio, un minuscolo 'a' e un maiuscolo 'A' hanno lo stesso keyCode, perché l'utente preme lo stesso tasto, ma un diverso charCode perché il carattere risultante è diverso.

Explorer e Opera non supporto charCode. Tuttavia, forniscono le informazioni sul personaggio in keyCode, ma solo con onkeypress. onkeydown e -upkeyCode contiene informazioni chiave."

+0

Sì, quindi è per questo che sono confuso sul perché? – ChrisMJ

+0

come ha sottolineato Jbl nella sua risposta, [questa pagina] (http://javascript.info/tutorial/keyboard-events) descrive il problema solo un po ', ma sembra che non risponda alla domanda per intero . Forse ho letto male la pagina, ma ad un certo punto sottolinea ancora il charcode come se fosse stato tirato su entrambi, semplicemente uno riporta un valore diverso. Forse un'occhiata in qualche vecchio documento di js troverà la risposta. Sto cercando ora, anche il mio oggetto verrà riscritto per includere le differenze di pressione dei tasti – SpYk3HH

+0

anche se suggerirei di evitare keypress in quanto non si attiva come eventi prevedibili come keydown e keyup – SpYk3HH

5

In casi normali, andare per keyup:

$(document).keyup(function(e){ 
    console.log(e.which); 
}); 

Motivi:

  1. keydown mantiene la cottura quando l'utente detiene le chiavi verso il basso, mentre keypress e keyup fuoco solo una volta
  2. .
  3. keypress non rileva i tasti speciali (ad es. SHIFT), keydown e keyup fare.