Ну, если ваша проблема заключается в переводе кодов клавиш на символы, почему бы не позволить браузеру обращаться с ним за вас? Это может показаться отвратительным, но вы можете просто разрешить браузеру изменять текстовое поле (так что удаление - это удаление, а период - период), а затем вернуться и отредактировать его ... Ум ... может быть, что-то вроде этого :
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;
});
}
Самая большая проблема с этим подходом заключается в том, что каждая нажатая клавиша появляется на экране на мгновение. С другой стороны, с REGEX у вас намного больше контроля над форматом допустимого ввода. В приведенном выше примере я допускаю только положительные или отрицательные числа (с необязательной десятичной точкой). Например: «123», «-123», «-123.456», «123.456».
Я знаю, что это не отвечает на ваш вопрос, но это полностью обходит проблему!
Это также мой вывод. Но, согласно http://www.quirksmode.org/js/keys.html, кажется, что Firefox не корректно обрабатывает событие нажатия клавиши. Я немного застрял в этой проблеме: -/ –
Еще одна вещь о keypress, я получаю тот же код за период И ключ удаления (не backspace): 46. Это огромная проблема для меня :( Использование английский Windows XP, английский Firefox, бельгийская клавиатура, бельгийское картографирование. –
Клавиша Firefox прекрасно, просто используйте обычное 'event.which' для получения символа. Затем добавьте резерв для поведения charCode-in-keyCode IE, например:' var c = 'which' в событии event.which: event.keyCode; ' – bobince