如何一次只按一个键

时间:2012-02-13 12:41:37

标签: javascript onkeyup onkeypress

我有这个输入文字:

010 141 474 010 141 474

我想逐一按下上面提到的数字。我使用一个标志,一次只允许一个数字,但它不正确。在描述的代码中我可以按两个数字firt,但我想要第一个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 个答案:

答案 0 :(得分:1)

你的问题最令人困惑。一次键入一个字符是完全无足轻重的,除非您特别想要防止按住键。因此,我不确定你甚至想要什么。

如果您希望用户只能以正确的顺序输入字符,这将对您有用:

<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,密钥代码将与字符代码匹配。

因此,使用onkeydownonkeypress之间的决定因素是您是否希望检测任意按键或可见的键入字符。

(以下是原始答案的一部分,但事实证明这不是OP想要的,我将其留在这里作为参考)。

如果您希望用户只能输入数字,可以这样做:

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

答案 1 :(得分:0)

如果我正确理解你。您希望某些用户逐个输入这些数字吗?因此,您需要将输入的键与整个字符串以及当前字符串进行比较,从prev构建。输入密钥。