2012-02-15 7 views
10

El código siguiente funciona perfectamente en Chrome, Firefox, en el iPhone e incluso en navegadores de terceros en Android. Sin embargo, cuando se ejecuta dentro de la clave del navegador nativo, los eventos para caracteres especiales como Å, Ä y Ö en mi teclado sueco simplemente no se activan.Sin eventos de pulsación de teclas para ciertas teclas en el navegador de Android

El ejemplo solo debe permitir al usuario ingresar un solo carácter a la vez. Funciona como un amuleto, a menos que yo presione en Android teclas como Å, Ä o Ö para las cuales puedo ingresar cualquier cantidad de caracteres.

Aquí está un jsFiddle para quien desee probarlo: http://jsfiddle.net/x7H6f/. Si no tiene teclas especiales como las suecas impresas en su teclado, los caracteres como é (mantener E) deberían hacer el "truco".

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Key Event test</title> 
    </head> 
    <body> 
     <input type="text" id="a" name="test" /> 
     <script> 
      document.getElementById("a").onkeypress = function(e) { 
       e = e || window.event; 
       var k = e.keyCode || e.which; 
       this.value = String.fromCharCode(k); 
       return false; 
     } 
     </script> 
    </body> 
</html> 

Y no, la combinación de teclas y la tecla no funcionan tampoco. ¿Me perdí algo, o es un error? ¡Es terriblemente molesto cuando se desarrollan aplicaciones suecas en PhoneGap!

Gracias!


EDIT: Como dice Manor en su respuesta, el evento input se puede utilizar. Aquí hay un violín que muestra las diferencias entre los eventos keypress, input y change: http://jsfiddle.net/Qxd76/ (use http://jsfiddle.net/Qxd76/show para ver el resultado en un teléfono inteligente).

+0

Im experimentando la misma cosa, esto es probablemente un error en Android? – rapadura

+0

Estoy decentemente seguro de que es un error en el navegador nativo para Android, que es lo que utilizan las vistas de web. No lo he confirmado, pero sospecho que debería solucionarse después de la versión 4, ya que cambiaron el navegador a Chrome después de eso. – Zut

+0

@rapadura @Zut '' input'' event no devuelve '' keyCode'' o '' which'' o '' charCode'' .. – Kosmetika

Respuesta

9

Acabo de pasar un montón de tiempo sobre este problema. estoy desarrollado para hebreo y todas las cartas hebreas no son un evento de disparo para mí.

he encontrado la solución y lo daré para que explique corta antes

al uso de todos los eventos clave de la búsqueda del navegador para la clave que pulsar para. causa alguna razón por la cual se desconocen todas las cartas en otro idioma del inglés en el navegador nativo de Android y esta es la razón por la cual no se activa ningún evento cuando se completa el registro de entrada.

la solución es buscar evento en la entrada y no en la tecla. por ejemplo, si tenemos en el método de entrada de texto .change() será genial para nosotros.

estoy usando el método addEventListener() y funciona como un amuleto.

este es el código

var exmpleInput = document.getElementById('input-id'); 
if(exmpleInput) { 
    exmpleInput.addEventListener("input", function() { 
     exampleFunction(this) 
    }, false); 
} 
+0

¡El evento de entrada funciona a la perfección! Aunque el evento de cambio solo se activará una vez que la entrada pierda el foco, y no se puede usar como se describe en la pregunta. – Zut

+0

me salvó el día !!! – Lentyai

Cuestiones relacionadas