使用 JavaScript 检查输入是否为整数

3

这是我尝试过的:

<html>
<head>
<script>
function myFunction() {
var num = document.getElementById("num").value;
if (Number.isInteger(num)) { 
document.getElementById("show").innerHTML = "Number is integer";
} else {
document.getElementById("show").innerHTML = "Number is not integer";
}
</script>
</head>
<body>
<input id = "num"></input>
<button onclick = "myFunction()">Submit</button>
<p id = "show">Result Appears Here</p>
</body>
</html>

这里的问题是,即使数字是整数,我始终会得到“number is not integer”的提示。代码应该检查输入是否为整数。谢谢。

3个回答

8
在控制台中,可以看到#num元素的value以字符串形式返回。只需使用加号符号将其转换为number即可。
另外一件事-每次函数调用时,您都在覆盖#num元素的innerHTML属性。您必须将第二个操作document.getElementById("show").innerHTML = "Number is not integer"插入到else语句中,以避免覆盖。

function myFunction() {
  var num = document.getElementById("num").value;
  console.log(typeof num);

  if (Number.isInteger(+num)) {
    document.getElementById("show").innerHTML = "Number is integer";
  } else {
    document.getElementById("show").innerHTML = "Number is not integer";
  }
}
<input id="num"></input>
<button onclick="myFunction()">Submit</button>
<p id="show">Result Appears Here</p>

There's also another way to check if a number is integer, using modulo.

function myFunction(num) {
  num % 1 ? console.log("Not Integer") : console.log("Integer");
}

myFunction(5);
myFunction(5.5);


我完全忘记了那个“else”,谢谢你的帮助<: - AmirWG
@AmirWG 还要注意第二种更快地实现正确结果的方法。(: - kind user
1
请注意,""%1null%1都返回0,因此取模方法有其怪癖。 - RobG
@RobG 按照你的逻辑 - 我们可以放置任何东西代替数字 - 空对象,随机字符串或其他任何东西,可能输出会不正确,但是...为什么要这样做呢? OP 明显假定输入将是一个数字。当然 - 我们可以设置条件,如果输入不是数字类型,则返回 false 或其他任何内容,但是 OP 实际上是否需要呢? - kind user
当输入预期为字符串时,确保字符串至少是整数似乎是明智的。MDN上有适用于"isInteger"的polyfill。 - RobG
1
这在IE中不起作用。https://dev59.com/6oTba4cB1Zd3GeqP6XRV - illinoistim

0

嗯,怎么样试试这个:

if(!isNaN(num)){
    if(Number.isInteger(num){
        //your code
    } else {
        //your code
    }
}

为什么要使用 isNaN 测试?Number.isInteger(NaN) 返回 false,因此单独测试NaN没有任何意义。 - RobG

0

给你一点建议:学会如何正确缩进你的代码:

function myFunction() {
    var num = document.getElementById("num").value;
    if (Number.isInteger(num)) { 
        document.getElementById("show").innerHTML = "Number is integer";
    }
    document.getElementById("show").innerHTML = "Number is not integer";
}

如果你这样做,你会很容易地看到最后一行将用Number is not integer替换你放入段落中的任何内容。
你需要一个else来完成工作。
此外,文本框中输出的任何内容都是字符串,因此您必须先运行它通过parseInt
这可能会更好地工作:
function myFunction() {
    var num = parseInt(document.getElementById("num").value,10);
    if (Number.isInteger(num)) { 
        document.getElementById("show").innerHTML = "Number is integer";
    }
    else document.getElementById("show").innerHTML = "Number is not integer";
}

另外:

  • input 是一个 void 元素,这意味着它没有结束标签。
  • 对于 HTML 属性,你真的不应该在 = 符号周围有空格,因为一些浏览器会误解这个。例如:id="something"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接