2011-09-25 12 views
12

Estoy tratando de recuperar el carácter insertado en un campo de texto/entrada con jQuery.jQuery - presione el carácter - INDEPENDIENTE del teclado

uso el habitual:

var character = String.fromCharCode(e.keyCode || e.which); 

método, pero el único problema se produce cuando se utiliza un diseño de teclado diferente, que acabo de notar.

Así, por ejemplo, en un teclado estándar de EE. UU. Funciona perfectamente. En un teclado alemán para instanece, si tengo el idioma configurado en inglés, básicamente haciendo que sea un teclado estadounidense estándar, cuando presiono los caracteres equivalentes a :;'\,./[]=-, obtengo los caracteres alemanes que veo en mi teclado (aunque el equivalente en inglés de luego se agrega a la entrada).

Ejemplo: si console.log(character) de la sentencia folowing me sale:

  • En la entrada: []\';/.,
  • En la consola: ÛݺÞܼ¾¿

Mi pregunta obvia es, ¿cómo puedo hacer Asegúrese de obtener el verdadero insertador de caracteres?

Respuesta

17

El evento de pulsación de tecla es diferente de la keyup y eventos keydown ya que contiene la clave realmente presionado. Intenta usar eso en su lugar. Compruébelo con este fragmento:

$('body').keypress(function(e){ 
    console.log('keypress', String.fromCharCode(e.which)); 
}); 
$('body').keyup(function(e){ 
    console.log('keyup', String.fromCharCode(e.which)); 
}); 
+0

Uso 'e.keyCode' – vladkras

+0

evento de pulsación de tecla que no se activa en los navegadores de Android – Stanly

+0

El uso de las teclas de flecha produce resultados inesperados. – Grayson

6

Lo que puede hacer es hacer que el personaje aparezca en un cuadro de texto oculto y obtener el valor real. De esta forma, obtendrá el carácter . Actualmente está pasando el código de clave como si fuera un código de carácter. Ellos no son los mismos.

http://jsfiddle.net/RQQpT/

(function() { 
    var input = $("<input>").appendTo('body') // an hidden input element 
          .css({ position: "absolute", 
            left:  -500, 
            top:  -500  }); 

    $('body').bind({ keydown: function(e) { 
         input.focus(); // make characters appear in input element 
        }, 

        keyup: function() { 
         var value = input.val(); // get value when key pressed 

         input.val(""); // reset value of input element 

         if(value) { 
          alert(value); // if there is a value, display it 
         } 
        } 
        }); 
})(); 
+0

Eso es un poco complicado cuando se puede obtener de manera confiable el carácter escrito en el evento 'keypress'. –

+0

@Tim Down: está en lo cierto, pero 'keypress' no funciona para los caracteres que se pueden obtener con varias teclas, p. 'ë' (que es' "' y 'e').' keypress' disparará '" 'y' e' por separado. – pimvdb

+0

¿Tiene un ejemplo que podría probar en mi teclado del Reino Unido? Estoy bastante seguro de que en su ejemplo la mayoría de los navegadores activarán un evento de pulsación de tecla con el eventual carácter 'ë' en todos los navegadores, pero no estoy seguro de si obtendrá otros eventos de pulsación de tecla primero. –

Cuestiones relacionadas