Как нажимать только одну клавишу за раз - PullRequest
2 голосов
/ 13 февраля 2012

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

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 ]

1 голос
/ 13 февраля 2012

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

Если вы хотите, чтобы пользователь мог вводить символы только в правильном порядке, это будет работать для вас:

<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);"/>
0 голосов
/ 13 февраля 2012

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

...