javascript - event - Keycode siempre es cero en Chrome para Android
js event key (9)
He enfrentado el mismo problema con los dispositivos Android de SonyXperia y HTC. He desarrollado una aplicación híbrida en la que estoy validando el campo de texto de Cantidad al leer event.keyCode()
del carácter ingresado en el evento keydown
del campo de texto, de modo que solo puedo ingresar números y puntos (.) Caracteres. Lo intenté pero no funcionó, devolviendo siempre 0 en estos dispositivos. Más tarde vine con otra solución con evento keyup
y comparación de caracteres a través de Expresión Regular:
$("#AmountField").keyup(function (e) {
var regex = /^[0-9/.]$/;
var str = $(this).val();
var subStr = str.substr(str.length - 1);
if(!regex.test(subStr)) {
if(str.length >0){
$(this).val(str.substr(0, (str.length - 1)));
}else{
$(this).val();
}
}
});
Espero que esto pueda ayudar a las personas que enfrentan este problema. Buena suerte.
Necesito detectar el código clave para un cuadro de búsqueda personalizado en mi sitio web, pero el código clave siempre se vuelve cero en Chrome para Android (excepto para el retroceso, que devuelve 8). ¿Alguien más ha experimentado esto, y cómo lo superaste? Nuestro sitio web funciona en todos los navegadores móviles, excepto Chrome para Android, porque no podemos detectar un código clave o un código de caracteres que no sea cero.
Estoy ejecutando Chrome 27.0.1453.90 en Android 4.1.2 Jelly Bean. El problema se puede duplicar con algo tan simple como:
alert(event.keyCode);
La verdadera manera de obtener el keyCode es usar
event.which
Esta propiedad en el objeto de evento es estandarizar la propiedad event.keyCode
. Puede leer sobre esto también en la documentación de jQuery here o en MDN here
De otra manera, tengo mucha experiencia con eventos de teclado en dispositivos Android. El navegador de Android a veces tiene problemas con los eventos del teclado debido a la fragmentación del dispositivo (diferentes ROM entre dispositivos o aplicaciones de teclado externo). La mejor manera es tratar de usar todos los eventos del teclado (tecla abajo, tecla arriba y tecla) y comparar cada resultado para presionar la tecla.
La mejor manera es usar el evento "entrada" y obtener todo el tiempo la última carta. El evento de entrada puede controlar como en mi respuesta here .
Me enfrenté a este problema y así es como descubrí cómo resolver el problema.
- Primero, debe habilitar la depuración USB en su teléfono Android para poder ver los registros de su navegador en su computadora de escritorio.
- En segundo lugar, actualice su aplicación web en su teléfono y dentro de su consola en el tipo de escritorio "monitorEvents (documento)" o cualquier elemento que desee inspeccionar.
- Realice la acción que desea inspeccionar en su teléfono.
Y así es como descubrí que el evento keydown fue disparado por un evento único llamado "textInput" que contiene la información dentro de event.originalEvent.data.
Espero que esto te ahorre tiempo y buena suerte!
Necesito usar charCode en lugar de keyCode
<input type="text" onKeyPress="return funName(this,event)" />
<script language="javascript">
function funName(th,ev)
{
alert(ev.charCode);
}
</script>
Nos encontramos con este problema recientemente en un teléfono Android hecho en China, Meizu MX3, que tiene un sistema operativo muy personalizado basado en Android 4.4.4 .
El navegador predeterminado y Chrome funcionan bien, pero por algunas razones extrañas no sabemos, event.keyCode , event.charCode y event.which devuelven 0 todo el tiempo en algunos otros navegadores (como el navegador CM o la vista web de la aplicación Wechat ).
Resolvimos esto marcando el último carácter que ingresaste, como ''A'' o '''' (espacio), luego lo convertimos a código ascii usando charCodeAt como "A" .charCodeAt (0) que devuelve 97, que es el carácter real Código que necesitamos.
Pero solo podemos determinar el código de caracteres de los caracteres visibles utilizando esta estrategia, que satisface nuestra necesidad actual gracias a Dios.
Espero que ustedes puedan obtener algo de inspiración de esto.
Si alguien todavía lo está buscando, el problema aparece en el teclado Samsung de acciones para dispositivos android
.
En su lugar, use onkeyup
.
cambie el tipo de entrada a tel: <input type="tel">
esto le permitirá registrar el código de clave, pero no registra el retroceso, y podría forzar el teclado en el teléfono móvil a solo números.
La solución de abajo también funciona para mí. También podría ser útil para otros.
var getKeyCode = function (str) {
return str.charCodeAt(str.length - 1);
}
document.getElementById("a").onkeyup = function (e) {
var kCd = e.keyCode || e.which;
if (kCd == 0 || kCd == 229) { //for android chrome keycode fix
kCd = getKeyCode(this.value);
}
alert(kCd)
}
<input type="text" id="char" size="15" onblur="showKeyCode()" value="a">
<input type="button" value="Show Key Code" onclick="showKeyCode();">
<script>
function showKeyCode()
{
var character = document.getElementById ( "char" ).value.substr(this.length - 1);
var code = character.charCodeAt();
var stringall = document.getElementById ( "char" ).value;
var msg = "The Key Code for the /""+character+"/" character is "+code+".";
alert(msg);
}
</script>