Как нажимать только одну клавишу за раз
У меня есть этот входной текст:
010 141 474 010 141 474
Я хочу нажать выше номера в порядке, который представлен, один за другим. Я использую флаг, чтобы разрешить только один номер за раз, но он не работает правильно. В коде, который изображен, я могу нажать оба числа первый, но я хочу первый 0, второй 1, третий 0 и т. Д... А как насчет дубликатов чисел? Я дублирую код? Также я подумал проверить, есть ли кнопка onkeyup, но ничего. Любая помощь? Заранее спасибо. Мой код:
function keyPressed(event){
var code;
var isKeyRepeating = false;
if(window.event){ //IE
code = event.keyCode;
}
else{ //other browsers
code = event.which;
}
if (code == 48 || code == 96){ //both keycodes for the same number
document.onkeypress("0");
isKeyRepeating = true;
}
if (code == 49 || code == 97){
document.onkeypress("1");
isKeyRepeating = true;
}
else {
event.preventDefault();
isKeyRepeating = false;
}
}
поле ввода:
<input style="border-style: inset" size="90" type="text" name="key" id="txtboxToFilter" onkeypress="javascript:keyPressed(event);"/>
2 ответа
Ваш вопрос является наиболее запутанным. Ввод одного символа за раз является тривиальным, если только вы не хотите, чтобы клавиши не удерживались. Поэтому я не уверен, чего ты хочешь.
Если вы хотите, чтобы пользователь мог вводить символы только в правильном порядке, это будет работать для вас:
<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
, Однако есть только один keypress
событие для A
,
Еще более важно то, что нельзя ожидать, что все коды клавиш будут совпадать с кодами символов при использовании 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);"/>
Если я правильно тебя понял. Вы хотите, чтобы некоторые пользователи вводили эти цифры один за другим? Поэтому вам нужно сравнить введенный ключ со всей строкой и с текущей строкой, построить из пред. введенные ключи.