Beh, se il vostro problema è la traduzione dei codici dei tasti a personaggi, perché non lasciare che gestisce il browser per voi? Questo potrebbe sembrare orribile, ma potresti semplicemente consentire al browser di modificare la casella di testo (in modo che l'eliminazione sia un'eliminazione e un punto sia un punto), quindi tornare indietro e modificarlo ... Ehm ... forse qualcosa del genere :
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;
});
}
Il problema più grande con questo approccio è che ogni tasto premuto appare sullo schermo per un momento. D'altra parte, con REGEX hai molto più controllo sul formato dell'input consentito. Nell'esempio sopra, permetto solo numeri positivi o negativi (con un punto decimale opzionale). Ad esempio: "123", "-123", "-123.456", "123.456".
So che questo in realtà non rispondere alla tua domanda, ma elude la questione del tutto!
Questa è anche la mia conclusione. Ma, secondo http://www.quirksmode.org/js/keys.html, sembra che Firefox non gestisca correttamente l'evento keypress. Sono un po 'bloccato su questo tema: -/ –
Un'altra cosa su pressione di un tasto, ottengo lo stesso codice per il periodo e il tasto di cancellazione (non backspace): 46. Questo è un problema enorme per me :( Utilizzando italiano Windows XP, inglese Firefox, tastiera belga, mappatura belga –
La pressione di un tasto di Firefox va bene, basta usare il solito 'event.which' per ottenere il carattere, quindi aggiungere il fallback per il comportamento di charCode-in-keyCode di IE. = 'which' in event? event.which: event.keyCode; ' – bobince