Как нажимать только одну клавишу за раз

У меня есть этот входной текст:

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);"/>

Если я правильно тебя понял. Вы хотите, чтобы некоторые пользователи вводили эти цифры один за другим? Поэтому вам нужно сравнить введенный ключ со всей строкой и с текущей строкой, построить из пред. введенные ключи.

Другие вопросы по тегам