【问题标题】:Number Validation Not Working号码验证不起作用
【发布时间】:2015-01-05 16:36:27
【问题描述】:

我有一个输入字段,它只应该接受介于 1 和 4 之间的数字。如果数字介于 1 和 4 之间,它会运行一些代码。如果没有,它会发出警报,告诉用户使用 1 到 4 之间的数字再试一次。这是我的代码

var number = document.getElementById("num").value;
     if(Number(number) === 1 || Number(number) === 2 || Number(number) === 3 || Number(number) === 4 ){
               //success code here///
             }
     else if(Number(number) !== 1 || Number(number) !== 2 || Number(number) !== 3 || Number(number) !== 4) { 
        }       alert("Please type a whole number between(and including) 1 and 4 into the input field.");

我了解到'.value;'函数返回一个字符串,即使该值是一个数字。所以我把 var 'number' 放在 Number();将其转换为数字的函数。 问题是,当我在输入字段中输入 1 时。即使它等于 1,它也会发出警报。其他数字也不起作用。我检查了控制台,没有语法错误(也根据 DreamWeaver)。非常感谢您的帮助:)

【问题讨论】:

  • 您不需要第二个if 测试。如果它不是您测试过的数字之一,那么您已经知道您需要知道什么。
  • @Pointy 所说的将 else if(){ 更改为 else{
  • @Pointy 它仍然无法正常工作,正在发出警报
  • 我认为您只是犯了一个错误,您的 alert("Please..."); 不在最后一个 } 之外,这意味着它每次都会运行。
  • 它有助于通过 jsbeautifier.org 运行您的代码 - 这将使拼写错误更加明显。

标签: javascript html validation input operators


【解决方案1】:

我认为您将警报放在else if 子句之外是一个简单的错误。

但是,您还可以做一些其他的事情来使其更具可读性和效率。

// Call Number() here so you only have to do it once
var number = Number(document.getElementById("num").value);
// You can also do something like parseInt(document.getElementById("num").value)

// Now check to see if Number() or parseInt() actually parsed an integer out of their input
// and then check that if it's outside your number range
if (isNaN(number) || number < 1 || number > 4) {
    alert("Please type a whole number between(and including) 1 and 4 into the input field.");
} else {
    // Do Successful code
}

【讨论】:

  • jsfiddle.net/alienc/f6oq1sf1/9 [在 'gen()' 函数中] 我重新编写了所有语句,但仍然无法正常工作。即使我遵循了您的代码,它也可以接受字符串和任何数字。(检查“基本平假名”,然后在数字字段中键入字符串或任何数字,然后按“gen romaji”,即使代码明确表示不接受某些值)
  • 我看到了两个小问题。首先,您从未给变量number 赋值。我认为在allhiragana.checked 行之后,您会想要执行var number = Number(numInput.value); 之类的操作。然后你还有另一个小错误,你正在检查小于 1 和大于 4 的数字,而不是两者之间的数字。因此,您可以将该检查更改为 ` else if (number >= 1 && number else if 和else 中切换代码
  • 我确实定义了数字。我刚刚意识到没有理由使用“numInput.value”,因为这就是“数字”值;输入字段的 val。此外,当我在框中键入字符串时,它会显示“键入 1 到 4 之间的数字”的警报。这是错误的,因为我输入了 'if(isNaN(number) == true) { alert("哎呀!请在输入字段中输入一个整数。");'这意味着如果该警报没有发出,那么它是否以某种方式通过了这个条件?
  • 您定义了number,但是您在页面加载时定义了它,所以它总是一个空字符串,它不会随着输入框的更新而更新它的值。您必须在gen() 内设置number 的值,否则它的值会错误。一旦你解决了另一个问题,让我们来解决它。
  • 哇。我所要做的就是移动我定义数字的地方。现在一切都解决了。谢谢!
【解决方案2】:

我们也可以这样写

var patt1 = /[1-4]/g;
if(patt1.test(number)){
     //success code here///
}
else{
    alert("Please type a whole number between(and including) 1 and 4 into the input field.");
}

【讨论】:

  • 使用这样的正则表达式应该可以工作,但你真的应该使用正则表达式作为最后的手段(或大大简化代码)。像这样的东西足够轻巧,没关系,但我认为值得一提。
猜你喜欢
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
相关资源
最近更新 更多