Esto es lo que tengo ahora:
$("input").bind("keydown",function(e){
var value = this.value + String.fromCharCode(e.keyCode);
}
Si el e.keyCode
no puede haber un carácter ASCII ( Alt, backspace, del, arrows., Etc) ... Yo ahora necesito trim
estos valores de value
alguna manera (preferiblemente mediante programación - no con tablas de búsqueda).
Estoy usando jQuery.
Debo usar el keydown
evento. keyPress
no se activa para ciertas claves que necesita para capturar ( Esc, del, backspace, etc.).
No puedo usar setTimeout
para obtener el valor de la entrada. setTimeout(function(){},0)
es muy lento
javascript
jquery
special-characters
keycode
David Murdoch
fuente
fuente
keydown
para capturar códigos de caracteres? Te espera un viaje increíble : quirksmode.org/js/keys.html (sugerencia: ¡¡ usokeypress
!! )document.onkeydown = function(e){ console.log('Key: ' + e.key); }
Respuestas:
Tal vez no entendí la pregunta correctamente, pero ¿no puede usarla
keyup
si desea capturar ambas entradas?fuente
En mi experiencia
String.fromCharCode(e.keyCode)
no es confiable.String.fromCharCode
espera códigos de barras unicode como argumento;e.keyCode
devuelve códigos de clave de JavaScript. ¡Los códigos de clave de Javascript y los códigos de código Unicode no son lo mismo! En particular, las teclas del teclado numérico devuelven un número diferente alkeycode
de las teclas numéricas ordinarias (ya que son teclas diferentes) mientras que la mismakeycode
se devuelve para ambasupper
ylowercase
letras (presionó la misma tecla en ambos casos), a pesar de que tienen diferentescharcodes
.Por ejemplo, la tecla numérica ordinaria 1 genera un evento con
keycode
49, mientras que la tecla numérica 1 (con Numlockencendido) generakeycode
97. ConString.fromCharCode
esto obtenemos lo siguiente:String.fromCharCode
espera códigos de código unicode, no códigos de código javascript. La tecla agenera un evento con un valorkeycode
de 65, independiente del caso del carácter que generaría (también hay un modificador para si Shiftse presiona la tecla, etc. en el evento). El personaje atiene un Unicodecharcode
de 61 mientras que el personaje Atiene uncharcode
41 (según, por ejemplo, http://www.utf8-chartable.de/ ). Sin embargo, esos sonhex
valores, la conversión a decimal nos da uncharcode
65 para "A" y 97 para "a". [1] Esto es consistente con lo que obtenemos deString.fromCharCode
estos valores.Mi propio requisito se limitaba a procesar números y letras ordinarias (aceptar o rechazar dependiendo de la posición en la cadena) y dejar pasar los caracteres de control ( F-claves, Ctrl-algo). Por lo tanto, puedo verificar los caracteres de control, si no es un carácter de control, verifico contra un rango y solo entonces necesito obtener el carácter real. Dado que no me preocupan las mayúsculas y minúsculas (cambio todas las letras a mayúsculas de todos modos) y ya he limitado el rango de códigos, solo tengo que preocuparme por las teclas del teclado numérico. Lo siguiente es suficiente para eso:
En términos más generales, una función para devolver de forma confiable el carácter de a
charcode
sería genial (tal vez como un complemento jQuery), pero no tengo tiempo para escribirlo en este momento. Lo siento.También mencionaría
e.which
(si está usando jQuery) que se normalizae.keyCode
ye.charCode
, para que no tenga que preocuparse por qué tipo de tecla se presionó. El problema de combinarlo conString.fromCharCode
restos.[1] Estuve confundido por un tiempo -. todos los documentos dicen que
String.fromCharCode
espera un código unicodecharcode
, mientras que en la práctica parecía funcionar para los códigos ASCII, pero creo que eso fue debido a la necesidad de convertir a decimal de hexadecimal, combinado con el hecho de que los códigos ASCII y los códigos decimales unicode se superponen para los comunes letras latinas.fuente
keyCode
es saber qué tecla se presionó, no saber qué personaje usar. Por ejemplo, "U" en un teclado Dvorak tiene el mismo código clave que "F" en un teclado QWERTY o "ㄹ" en un teclado coreano, etc. El punto no es convertirlo en un carácter, está ahí para que pueda asigna fácilmente cosas a una posición del teclado.Nombres clave legibles indexados por código clave
Hay relativamente pocos códigos clave por lo que simplemente una lista de los valores correspondientes en una matriz estática para que pudiera simplemente convertir el número
65
enA
el usokeyboardMap[65]
No todos los códigos clave se asignan a un carácter imprimible, por lo que se devuelve alguna otra cadena identificable.
Es posible que deba modificar la matriz para satisfacer sus necesidades y simplemente puede devolver cadenas vacías para todos los caracteres que no desea traducir. La siguiente matriz me permite determinar de forma rápida y confiable qué tecla se presionó en cualquier entorno. ¡Disfrutar!
Pruebe el siguiente fragmento de código con este enfoque de búsqueda de matriz estática ...
Mostrar fragmento de código
Códigos clave dignos de mención
Letras AZ: (65-90)
Dígitos 0-9: (48-57)
Teclado numérico 0-9: (96-105)
Teclas de flecha: (37-40)
Tecla Tabulador: (9)
Introducir clave: (13)
Tecla de barra espaciadora: (32)
Tecla específica del sistema operativo (91) Tecla de Windows (Windows) o tecla de comando (Mac)
Tecla Alt: (18)
Clave de control: (17)
Tecla Shift: (16)
Tecla de bloqueo de mayúsculas: (20)
fuente
Solo una nota importante: la respuesta aceptada arriba no funcionará correctamente para keyCode> = 144, es decir, punto, coma, guión, etc. Para aquellos que debería usar un algoritmo más general:
Si tiene curiosidad sobre por qué, esto es aparentemente necesario debido al comportamiento de la función JS incorporada
String.fromCharCode()
. Para los valores dekeyCode <= 96
esto parece mapearse usando la función:chrCode = keyCode - 48 * Math.floor(keyCode / 48)
Para los valores de
keyCode > 96
esto parece mapearse usando la función:chrCode = keyCode
Si esto parece un comportamiento extraño, entonces bueno ... Estoy de acuerdo. Lamentablemente, estaría muy lejos de lo más extraño que he visto en el núcleo de JS.
fuente
let
una respuesta a una pregunta de 2009. :-)let
entonces le hice un favor ;-)Supongo que esto es para un juego o para un tipo de aplicación de respuesta rápida, de ahí el uso de KEYDOWN que KEYPRESS.
Editar : Dang! Estoy corregido (gracias Crescent Fresh y David): JQuery (o incluso los hosts DOM subyacentes) no exponen los detalles del WM_KEYDOWN y de otros eventos. Más bien, predigerieron estos datos y, en el caso de keyDown incluso en JQuery, obtenemos:
Tenga en cuenta que estas propiedades son los valores de UniCode.
Tenga en cuenta que no pude encontrar una referencia autorizada a eso en los documentos de JQuery, pero muchos ejemplos acreditados en la red se refieren a estas dos propiedades.
El siguiente código, adaptado de algún java (no javascript) mío, es por lo tanto totalmente erróneo ...
Lo siguiente le dará las partes "interesantes" del código clave:
fuente
keydown
o no).Sé que esta es una vieja pregunta, pero la encontré hoy buscando una solución preempacada para este problema, y no encontré nada que realmente satisficiera mis necesidades.
Aquí hay una solución (solo en inglés) que admite correctamente mayúsculas (desplazadas), minúsculas, puntuación, teclado numérico, etc.
También permite la identificación simple y directa de teclas que no se pueden imprimir, como ESC, flechas, teclas de función, etc.
https://jsfiddle.net/5hhu896g/1/
Gracias a DaveAlger por ahorrarme algo de tipeo, ¡y mucho descubrimiento! - al proporcionar la matriz de claves con nombre.
fuente
Hace poco escribí un llamado módulo de keysight que se traduce
keypress
,keydown
ykeyup
eventos en personajes y claves respectivamente.Ejemplo:
fuente
Para aquellos de ustedes que vinieron aquí buscando los valores de caracteres Unicode reales para un código clave, como lo hice, aquí hay una función para eso. Por ejemplo, dado el código de clave unicode de la flecha derecha, esto generará la cadena visible
\u001B\u005B\u0043
fuente
También puede usar la propiedad de solo lectura
key
. También respeta teclas especiales como shiftetc. y es compatible con IE9.Cuando se presiona un carácter no imprimible o especial, el valor estará activado de los valores clave definidos como
'Shift'
o'Multiply'
.event.key
'x'
'X'
'F5'
fuente
Consulte este enlace Obtenga el código de la tecla al presionar la tecla y el valor de char para cualquier código de tecla
fuente