25

我有这个javascript函数来验证一个数字是否大于另一个数字

function validateForm() {
    var x = document.forms["frmOrder"]["txtTotal"].value;
    var y = document.forms["frmOrder"]["totalpoints"].value;

    if (x > y) {
        alert("Sorry, you don't have enough points");
        return false;
    }
}

由于某种原因它不起作用。

如果我这样做,alert(x)我得到 1300,并alert(y)给出 999

这有效....

function validateForm() {
    var x = 1300;
    var y = 999;

    if (x > y) {
        alert("Sorry, you don't have enough points");
        return false;
    }
}
4

4 回答 4

69

您应该在比较之前将它们转换为数字。

尝试:

if (+x > +y) {
  //...
}

或者

if (Number(x) > Number(y)) {
  // ...
}

注意: parseFloat andpareseInt(用于比较整数,并且您需要指定基数)会给您NaN一个空字符串,比较NaN总是会是false,如果您不想将空字符串视为是0,那么您可以使用它们。

于 2012-10-26T01:34:23.170 回答
3

您可以使用 Number 构造函数“转换”为数字。

var number = new Number("8"); // 8 number

您还可以调用 parseInt 内置函数:

var number = parseInt("153"); // 153 number
于 2012-10-26T01:36:39.740 回答
3

您正在比较字符串。JavaScript 比较字符串中每个字符的 ASCII 码。

要了解您为什么会出错,请查看 charCodes:

"1300".charCodeAt(0);
49
"999".charCodeAt(0);
57

比较是假的,因为在比较字符串时,1 的字符代码不大于 9 的字符代码。

解决方法是将字符串视为数字。您可以使用多种方法:

parseInt(string, radix)
parseInt("1300", 10);
> 1300 - notice the lack of quotes


+"1300"
> 1300


Number("1300")
> 1300
于 2012-10-26T01:42:46.323 回答
1

做这个。

var x=parseInt(document.forms["frmOrder"]["txtTotal"].value);
var y=parseInt(document.forms["frmOrder"]["totalpoints"].value);
于 2012-10-26T01:34:32.673 回答