Ваш вопрос самый запутанный. Ввод одного символа за раз является тривиальным, если только вы не хотите, чтобы клавиши не удерживались. Поэтому я не уверен, чего ты хочешь.
Если вы хотите, чтобы пользователь мог вводить символы только в правильном порядке, это будет работать для вас:
<script type="text/javascript">
function keyPressed(event, input) {
if (event.keyCode == 8) {
// Allow backspace
return true;
}
// Detect character code: event.which on Firefox, event.keyCode on IE
var char = event.which ? event.which : event.keyCode;
// Convert to string
char = String.fromCharCode(char);
var match = 'aBÁ 010 141 474 010 141 474';
// Compare to character in match string and return result
return (match.charAt(input.value.length) == char);
}
</script>
<input size="30" type="text" name="key" id="txtboxToFilter" onkeypress="return keyPressed(event, this);"/>
Существует другой ответ, который использует аналогичную функцию, но критическое различие заключается в том, что он использует обработчик onkeydown
, который дает разные результаты. Необходимо понимать, что onkeydown
имеет дело с одной нажатой клавишей, а onkeypress
- с одним напечатанным символом. Например, если вы набираете прописные буквы A
, существует два события keydown
: одно для shift
, другое для a
. Однако для A
.
существует только одно событие
keypress
.
Еще более важно то, что при использовании onkeydown
нельзя ожидать, что все коды клавиш будут совпадать с кодами символов. Например, коды клавиш для чисел отличаются, если набираются с цифровой клавиатуры, а коды клавиш для специальных символов совершенно ненадежны. Однако при использовании onkeypress
коды клавиш будут совпадать с кодами символов, если клавиша представляет собой видимый символ.
Таким образом, решающим фактором между использованием onkeydown
или onkeypress
является то, хотите ли вы обнаруживать произвольные нажатия клавиш или видимые набранные символы.
(Следующее было частью исходного ответа, хотя оказалось, что это не то, чего хотел ОП, я оставляю его здесь для справки).
Если вы хотите, чтобы пользователь мог набирать только номер, это будет сделано:
<script type="text/javascript">
function keyPressed(event) {
var char = event.which ? event.which : event.keyCode;
char = String.fromCharCode(char);
var regexp = /\d/;
return regexp.test(char);
}
</script>
<input size="30" type="text" name="key" id="txtboxToFilter" onkeypress="return keyPressed(event);"/>