no estoy totalmente satisfecho con las otras respuestas dadas. Todos tienen algún tipo de falla para ellos.
El uso de keyPress
con event.which
no es confiable porque no puede capturar un retroceso o una eliminación (como lo menciona Tarl). Usando keyDown
(como en el de las respuestas de Tarl Niva y) es un poco mejor, pero la solución es defectuoso porque los intentos de utilizar event.keyCode
con String.fromCharCode()
(keyCode y charCode no son lo mismo!).
Sin embargo, lo que tenemos que hacer con el evento keydown
o keyup
es la clave real que se presionó (event.key
). Por lo que puedo decir, cualquier key
con una longitud de 1 es un carácter (número o letra) independientemente del teclado de idioma que está utilizando. Por favor corrígeme si eso no es verdad!
Luego está la respuesta muy larga de asdf. Eso podría funcionar perfectamente, pero parece excesivo.
Así que aquí hay una solución simple que capturará todos los caracteres, retrocede y elimina. (Nota: ya sea keyup
o keydown
funcionará aquí, pero no lo hará keypress
)
$("input").keydown(function(e) {
var isWordCharacter = event.key.length === 1;
var isBackspaceOrDelete = (event.keyCode == 8 || event.keyCode == 46);
if (isWordCharacter || isBackspaceOrDelete) {
}
});
en Firefox keyCode para la tecla F1 y las teclas P es igual (también F2 es 'q', F3 es 'r', etc.). En Chromium (navegador Webkit) F1 es 'P', F2 es 'Q', etc. – hluk
No se puede obtener el carácter tipeado confiablemente del evento 'keyup'. Esto puede funcionar en su teclado, pero para diferentes tipos de teclado y diferentes culturas no hay garantías en absoluto. –
Si el punto de @ TimDown no era lo suficientemente claro, aquí hay otro: ** esta es básicamente la respuesta incorrecta **. – Christian