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.
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: -/ –
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. –
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