io non sono totalmente soddisfatto con le altre risposte date. Hanno tutti una specie di difetto per loro.
L'utilizzo di keyPress
con event.which
non è affidabile perché non è possibile catturare un backspace o un'eliminazione (come indicato da Tarl). L'utilizzo di keyDown
(come nelle risposte di Niva e Tarl) è un po 'meglio, ma la soluzione è difettosa perché tenta di utilizzare event.keyCode
con String.fromCharCode()
(keyCode e charCode non sono la stessa cosa!).
Tuttavia, ciò che si ottiene con l'evento keydown
o keyup
è il tasto effettivo premuto (event.key
). Per quanto posso dire, qualsiasi key
con una lunghezza pari a 1 è un carattere (numero o lettera) indipendentemente dalla tastiera della lingua che si sta utilizzando. Per favore correggimi se questo non è vero!
Quindi c'è una risposta molto lunga da asdf. Potrebbe funzionare perfettamente, ma sembra eccessivo.
Quindi ecco una soluzione semplice che catturerà tutti i caratteri, il backspace e l'eliminazione. (Nota: o keyup
o keydown
funzionerà qui, ma non lo farà keypress
)
$("input").keydown(function(e) {
var isWordCharacter = event.key.length === 1;
var isBackspaceOrDelete = (event.keyCode == 8 || event.keyCode == 46);
if (isWordCharacter || isBackspaceOrDelete) {
}
});
Su Firefox keyCode per i tasti F1 e P è lo stesso (anche F2 è 'q', F3 è 'r' ecc.). Su Chromium (browser Webkit) F1 è 'P', F2 è 'Q' ecc. – hluk
Non è possibile ottenere il carattere digitato in modo affidabile dall'evento 'keyup'. Questo potrebbe funzionare sulla tastiera ma per tipi di tastiera e culture diverse non ci sono garanzie. –
Se il punto di @ TimDown non era abbastanza chiaro, eccone un altro: ** questa è fondamentalmente la risposta sbagliata **. – Christian