【问题标题】:How to press only one key at time如何一次只按一个键
【发布时间】:2012-02-13 12:41:36
【问题描述】:

我有这个输入文本:

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

【问题讨论】:

  • 你想达到什么目的?
  • 你需要正则表达式吗?
  • else if 替换第二次以上的if。否则,else 块几乎总是会被执行。
  • 您希望用户只输入这些数字吗? “010 141..”或连续两次不同的数字,如“11”。你能再解释一下你想要什么和不想要什么吗?
  • 就像大多数人弹钢琴一样:一次只用一根手指:)

标签: javascript onkeyup onkeypress


【解决方案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。但是,A 只有一个 keypress 事件。

更关键的是,当使用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);"/>

【讨论】:

  • 我编写并在 Firefox 上对其进行了测试,它运行良好。我建议你检查你的错误控制台,它可能会给出一些提示。
  • 我又试了一次,效果很好。如果我用字母更改数字是否也有效?
  • 是的,它也适用于字母、小写和大写以及特殊字符。
  • 感谢您的详细信息。这对我有很大帮助。我有个问题。如果我有多个练习,例如var match = ['010 141 474 010 141 474' , '258 852 582 258 852 582' , ' etc..'];,那么将每个练习的代码分开或组合在一起会更复杂?我有一个下拉菜单,我可以选择这个练习。我不知道你是否明白我的意思。
  • 编写一个函数来处理所有这些可能性应该很容易,并且不需要复制代码。例如,如果您的下拉列表是 SELECT 元素,您可以轻松地使用 selectedIndex 属性在匹配数组中选择正确的字符串。
【解决方案2】:

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

【讨论】:

  • 是这样的。有什么建议怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多