studio event javascript android html keyevent

event - keypress javascript



KeyCode en Android es siempre 229 (6)

En mi Samsung Galaxy Tab 4 (Android 4.4.2, Chrome: 49.0.2623.105) me encontré con una situación en la que el KeyCode siempre es 229.

He configurado una prueba simple para dos situaciones

<div contenteditable="true"></div> <input> <span id="keycode"></span>

guión:

$(''div, input'').on(''keydown'', function (e) { $(''#keycode'').html(e.keyCode); });

DEMO

Afortunadamente, puedo encontrar publicaciones sobre esto, pero no pude encontrar una con una solución que funcione. Alguien sugirió usar keyup en keyup lugar o usar el evento textInput , pero ese solo se dispara en el blur .

Ahora, para colmo, esto no sucede con el navegador de valores predeterminado :(

¡Cualquier ayuda sería apreciada!

ACTUALIZACIÓN: Si resulta que esto no es posible, todavía puedo agarrar la charla antes del caret: post


Al encontrarse con el mismo problema, solo ocurre con el teclado Samsung de stock en Android. Una solución fue desactivar las predicciones del teclado, lo que corrigió la entrada. Todavía analizando más para ver si se puede encontrar una solución en JS land.

Edit: He logrado encontrar una solución para nuestro caso. Lo que estaba sucediendo es que teníamos una lista blanca de caracteres permitidos que un usuario podía ingresar en nuestro cuadro de entrada. Estos eran caracteres alfanuméricos más algunos caracteres de control en lista blanca (por ejemplo, enter, esc, arriba / abajo). Cualquier otra entrada de caracteres tendría el evento predeterminado evitado.

Lo que sucedió es que todos los eventos con el código clave 229 se estaban evitando, y como resultado no se ingresó ningún texto. Una vez que agregamos el código clave 229 a la lista blanca, todo volvió a funcionar correctamente.

Por lo tanto, si está utilizando algún tipo de componente de control de entrada de formulario personalizado o de terceros, asegúrese de verificar que el código de clave 229 esté en la lista blanca / permitido y no se haya evitado por defecto.

Espero que esto ayude a alguien.


El evento normal de pulsación de tecla no proporciona el código de clave en el dispositivo Android. Ya ha habido una gran discussion sobre esto.

Si desea capturar la presión de space bar o special chars , puede usar el evento textInput .

$(''input'').on(''textInput'', e => { var keyCode = e.originalEvent.data.charCodeAt(0); // keyCode is ASCII of character entered. })

Nota: textInput no se activa en alfabetos, números, retroceso, ingreso y algunas otras teclas.


Estaba teniendo el mismo problema en los teléfonos Samsung S7. Se solucionó reemplazando el evento de keydown a keypress .

$("div, input").keypress(function (e) { $("#keycode").html(e.which); });

jQuery normaliza estas cosas, por lo que no hay necesidad de usar nada que no sea e.which https://.com/a/302161/259881



Tuve el mismo problema y no pude encontrar ninguna solución. Lo resolví usando javascript.

event.target.value.charAt (event.target.selectionStart - 1) .charCodeAt ()



Sé que estoy respondiendo a una publicación anterior, pero aún así este problema sigue ENCENDIDO, así que me gustaría compartir una opinión sobre él.
Sin embargo, este método no es una solución exacta, sino una solución de urgencia como la que tenía yo.
La clave es usar el valor del cuadro de texto mientras se presiona la tecla. para cada tecla, el valor cambiará y por la última actualización de valor podemos hacer que la tecla se haya pulsado.
Nota: esto solo funciona para la fuente visible en el teclado, es decir, caracteres alfanuméricos y caracteres especiales, esto no grabará ningún control ni las teclas de mayúsculas o alt como sabe.

$(''input'').keyup(function () { var keyChar = $(this).val().substr(-1); //you can do anything if you are looking to do something with the visible font characters });