2009-12-11 12 views
6

Estoy vinculando el evento de selección con jQuery para permitir algunos caracteres específicos en un cuadro de texto. Estoy intentando hacer que mi código sea compatible con el navegador y la plataforma. Mi problema principal es que no puedo encontrar una forma de asignar el código de clave recibido a un código de char válido, especialmente para el código de clave que proviene del teclado numérico (separador decimal, es un coma o un punto, etc.).código de clave de Javascript =/= código de char

Gracias de antemano por ayudar, Fabian

Respuesta

1

Bueno, como dije en los comentarios, el objetivo de esta pregunta era filtrar un cuadro de texto con valores numéricos. Pude alcanzar mi objetivo usando el evento de pulsación de tecla.

He publicado un jQuery plug-in para aquellos que estén interesados ​​en la solución.

6

Eso es correcto. No hay tal mapeo que puedas hacer; un keydown ni siquiera puede corresponderse con un personaje insertado. O Bloq Mayús podría cambiar el significado de la pulsación de tecla, y no puedes oler por eso. Y various other wrinkles.

Si desea conocer el código del carácter, su única opción es utilizar el evento keypress.

+0

Esta es también mi conclusión. Pero, según http://www.quirksmode.org/js/keys.html, parece que Firefox no maneja correctamente el evento de pulsación de tecla. Estoy un poco atascado en este tema: -/ –

+0

Una cosa más sobre la pulsación de teclas, obtengo el mismo código para el período Y la tecla de borrar (no retroceso): 46. Este es un gran problema para mí :( Uso inglés Windows XP, inglés Firefox, teclado belga, mapeo belga. –

+3

La tecla presionada de Firefox está bien, solo usa el usual 'event.which' para obtener el caracter. Luego añade el retorno para el comportamiento de charCode-in-keyCode de IE, por ejemplo' var c = 'which' en el evento? event.which: event.keyCode; ' – bobince

1

Bueno, si su problema es la traducción de los códigos clave a los caracteres, ¿por qué no dejar que el navegador lo maneje por usted? Esto puede sonar horrible, pero simplemente podría permitir que el navegador modifique el cuadro de texto (para que borrar sea una eliminación, y un punto sea un punto), y luego retroceda y edítelo ... Um ... tal vez algo como esto :

function hookEvents() { 
    $('#myTextBox').oldValue = $('#myTextBox').value; 
    $('#myTextBox').bind('keyup', function(event) { 
     // Maybe nothing's changed? 
     if (event.target.oldValue == event.target.value) { 
      return; 
     } 

     var validInput = /(\-?[0-9]*(?:\.[0-9]*)?)/; 
     var input = event.target.value; 
     var result = validInput.exec(input); 
     if (result.index != 0 || result[result.length-1] != input.length) 
     { 
      event.target.value = result[0]; 
     } 

     // update for later 
     event.target.oldValue = event.target.value; 
    }); 
} 

El mayor problema con este enfoque es que cada tecla presionada aparece en la pantalla por un momento. Por otro lado, con el REGEX tienes mucho más control sobre el formato de la entrada permitida. En el ejemplo anterior, solo permito números positivos o negativos (con un punto decimal opcional). Tales como: "123", "-123", "-123.456", "123.456".

Sé que esto realmente no responde a su pregunta, pero deja de lado el problema por completo.

+0

Interesante, pero como dijiste, el personaje aparecerá primero en el cuadro de texto. Esto es algo que no quiero tener. –

Cuestiones relacionadas