【问题标题】:Why my condition is not satisfied?为什么我的条件不满足?
【发布时间】:2013-07-08 04:14:58
【问题描述】:

我有一个文本框,我想让用户只输入 4 位数字,因为我想从用户那里花时间,但我遇到了一个奇怪的问题。

Fiddle Demo

Javascript

function CheckLength(val, key) {
      var keycode = (key.which) ? key.which : key.keyCode;
      if(!(keycode == 8 || keycode == 46) && (keycode < 48 || keycode > 57))
         return false;
      if (val.length < 4)
         console.log(val);
      else
         return false;
}

HTML 标记

 <input type="text" id="timepick" onkeyup="return CheckLength(this.value,event);"  />

谁能帮帮我?为什么会这样?

感谢您宝贵的时间。

【问题讨论】:

  • 那么,您想阻止该用户在文本框中输入超过 4 个数字吗?
  • @senyorToni Yes exaclty

标签: javascript html if-statement string-length


【解决方案1】:

您可以收听“keydown”事件而不是“keyup”这是您的Fiddle,(我只更改为向下)。 ,或通过重置“keyup”事件中的值来删除最后输入的键。

document.getElementById("timepick").addEventListener("keyup", function (e) {
    var keycode = (e.which) ? e.which : e.keyCode;
    if (e.target.value.length <= 4) console.log(e.target.value)
    if (!(keycode == 8 || keycode == 46) && (keycode < 48 || keycode > 57) || e.target.value.length > 3) 
        e.target.value = e.target.value.substr ( 0,4)
});

喜欢这个Fiddle

或者您可以使用 2 个单独的事件,一个“keydown”来阻止输入,一个 keyup 来读取值

document.getElementById("timepick").addEventListener("keydown", function (e) {
    var keycode = (e.which) ? e.which : e.keyCode;
    if (!(keycode == 8 || keycode == 46) && ((keycode < 48 || keycode > 57) || e.target.value.length > 3) e.preventDefault()

});
document.getElementById("timepick").addEventListener("keyup", function (e) {
    if (e.target.value.length == 4) console.log(e.target.value)
});

喜欢这个Fiddle

更新,关于您的评论 当然,您可以只使用“keydown”事件,并自行构建您想要的值。

document.getElementById("timepick").addEventListener("keydown", function (e) {
    var keycode = (e.which) ? e.which : e.keyCode;
    if (!(keycode == 8 || keycode == 46) && ((keycode < 48 || keycode > 57) || e.target.value.length > 3)) e.preventDefault()
    if (e.target.value.length == 3) console.log(e.target.value + String.fromCharCode(keycode))

});

喜欢这个Fiddle

【讨论】:

  • 它没有给出所有四个值。我想输入所有 4 个值
  • 是的,这就是我正在寻找的东西,我特别喜欢第三小提琴.. :) 谢谢你的努力 :)
【解决方案2】:

希望这对您有所帮助。它可以防止超过 4 个值并显示 4 个输入到日志中(在小提琴中,我通过警报更改了 console.log)。

我通过将 4 个值存储到一个变量中来解决它,如果用户输入超过 4 个值,则使用变量值恢复文本框值:

http://fiddle.jshell.net/6czXu/7/

var vals; 

function CheckLength(val, key) {
   var keycode = (key.which) ? key.which : key.keyCode;

   if (val.length < 5){
     alert(val);
     // Here store the 4 values
     vals = val;
     if((keycode == 8 || keycode == 46) && (keycode < 48 || keycode > 57))
       return false;
     }
     else{
        // Here we have more than 4 digits entered so
        // we restore the prevously stored into vals
        document.getElementById("timepick").value = vals;
        return false;
     }
 }

【讨论】:

  • 感谢您的努力:)
【解决方案3】:

改用onkeypress 事件,一切正常。 onkeyup 来晚了。

<input type="text" id="timepick" onkeypress="return CheckLength(this.value,event);"  />

【讨论】:

  • 也使用了它,但它在console.log() 中只给了我 3 个值我想要在日志中的所有 4 个值。
  • 嘿朋友谢谢你的努力:)
猜你喜欢
  • 2012-06-20
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 2021-12-13
  • 2021-04-23
相关资源
最近更新 更多