2

我有这个输入文本:

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

2 回答 2

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处理的是键入的单个字符。例如,如果您键入 uppercase A,则有两个keydown事件:一个 for shift,另一个 for a。然而,只有一个keypress事件A

更关键的是,在使用onkeydown. 例如,从数字键盘输入数字的键码是不同的,特殊字符的键码是完全不可靠的。但是,如果键代表可见字符,则键代码将onkeypress与字符代码匹配。

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

(以下是原始答案的一部分,虽然事实证明这不是 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);"/>
于 2012-02-13T13:17:24.567 回答
0

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

于 2012-02-13T12:50:27.550 回答