Я привязываю keydown событие с jQuery для разрешения некоторых определенных символов в текстовом поле. Я пытаюсь сделать свой перекрестный браузер кода и платформу совместимыми. Мой основной вопрос - то, что я не могу найти, что способ отобразить полученный код клавиши на действительный символьный код, специально для кода клавиши, прибывающего из цифровой клавиатуры (десятичный разделитель, это запятая или период, и т.д.).
Ну, как я сказал в комментариях, цель этого вопроса заключалась в том, чтобы отфильтровать текстовое поле по числовым значениям. Мне удалось достичь своей цели с помощью события нажатия клавиши.
Я опубликовал плагин jQuery для тех, кто заинтересован в решении.
Верно. Вы не можете сделать такого отображения; нажатие клавиши
может даже не соответствовать вставляемому символу. Или Caps Lock может изменить значение нажатия клавиш, и вы не можете нюхать это. И различные другие морщины .
Если вы хотите узнать код символа, ваш единственный вариант - использовать событие нажатие клавиши
.
Что ж, если ваша проблема заключается в преобразовании кодов клавиш в символы, почему бы не позволить браузеру сделать это за вас? Это может показаться отвратительным, но вы можете просто разрешить браузеру изменять текстовое поле (так что удаление - это удаление, а точка - это точка), а затем вернуться и отредактировать его ... Гм ... может быть, что-то вроде этого :
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».
Я знаю, что это не совсем ответ на ваш вопрос, но это полностью обходит проблему!