Saltar al contenido

Determine si JavaScript e.keyCode es un carácter imprimible (sin control)

Solución:

Keydown le dará el keyCode de la tecla presionada, sin ninguna modificación.

$("#keypresser").keydown(function(e){
    var keycode = e.keyCode;

    var valid = 
        (keycode > 47 && keycode < 58)   || // number keys
        keycode == 32 || keycode == 13   || // spacebar & return key(s) (if you want to allow carriage returns)
        (keycode > 64 && keycode < 91)   || // letter keys
        (keycode > 95 && keycode < 112)  || // numpad keys
        (keycode > 185 && keycode < 193) || // ;=,-./` (in order)
        (keycode > 218 && keycode < 223);   // []' (in order)

    return valid;
});

Solo las teclas numéricas, las teclas de letras y la barra espaciadora tendrán códigos de tecla correlacionados con String.fromCharCode ya que usa valores Unicode.

La pulsación de tecla será la representación charCode del texto introducido. Tenga en cuenta que este evento no se activará si no se “imprime” texto como resultado de la pulsación de tecla.

$("#keypresser").keypress(function(e){
    var charcode = e.charCode;
    var char = String.fromCharCode(charcode);
    console.log(char);
});

http://jsfiddle.net/LZs2D/1/ Mostrará cómo funcionan.

KeyUp se comporta de manera similar a KeyDown.

Solo como fondo, el evento “pulsación de tecla” le dará una charCode propiedad cada vez que presione una tecla de carácter.

Editor.addEventListener('keypress', function(event){
    if (event.charCode) {
        //// character key
        console.log( String.fromCharCode(event.charCode) ); /// convert charCode to intended character.
    } else {
        //// control key
    }

Sin embargo, el evento de “pulsación de tecla” no captura cada pulsación de tecla: varias teclas se activan antes del evento de “pulsación de tecla”.

Por el contrario, el evento “keydown” capturará cada pulsación de tecla, pero no tiene un charCode propiedad. Entonces, ¿cómo podemos saber si es una clave de carácter? Verificando en cada pulsación de tecla si el clave está dentro de los límites inferior y superior para varios rangos no es óptimamente eficiente. Sospecho que también hay problemas para los personajes fuera del rango ASCII.

Mi enfoque es verificar la longitud de la propiedad “clave” del evento. La propiedad “key” es una alternativa a “keyCode” para determinar qué tecla se presionó. Para control keys, la propiedad “key” es descriptivo (por ejemplo, “flecha derecha”, “F12”, “volver”, etc.). Para personaje claves, la propiedad “clave” para una clave de carácter es solo el personaje (por ejemplo, “a”, “A”, “~”, “”, etc.). Por lo tanto, para cada clave de carácter, la longitud de la propiedad “clave” tendrá una longitud de 1; mientras que los caracteres de control tendrán una longitud superior a 1.

Editor.addEventListener('keydown', function(event){
    if (event.key.length == 1){ 
        //// character key
    } else {
        //// control key
    }
})

Noté que todos los caracteres con una longitud de 1 (‘A’, ‘B’, número, símbolo) son imprimibles, así que solo los uso. También uso esta solución para caracteres que no están en inglés:

if(e.key.length==1)
    print();
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *