我有这个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;
}
}
答案 0 :(得分:51)
您应该在比较之前将它们转换为数字。
尝试:
if (+x > +y) {
//...
}
或
if (Number(x) > Number(y)) {
// ...
}
注意: parseFloat
和pareseInt
(对于比较整数,您需要指定基数)将为NaN
提供一个空字符串,与NaN
进行比较将始终为false
,如果您不想将空字符串视为0
,那么您可以使用它们。
答案 1 :(得分:3)
您可以使用数字构造函数“转换”为数字。
var number = new Number("8"); // 8 number
你也可以调用parseInt内置函数:
var number = parseInt("153"); // 153 number
答案 2 :(得分:3)
您正在比较字符串。 JavaScript会比较字符串中每个字符的ASCII代码。
要了解为什么会出错,请查看charCodes:
"1300".charCodeAt(0);
49
"999".charCodeAt(0);
57
比较结果为false,因为在比较字符串时,1的字符代码不大于9的字符代码。
修复方法是将字符串视为数字。您可以使用多种方法:
parseInt(string, radix)
parseInt("1300", 10);
> 1300 - notice the lack of quotes
+"1300"
> 1300
Number("1300")
> 1300
答案 3 :(得分:1)
这样做。
var x=parseInt(document.forms["frmOrder"]["txtTotal"].value);
var y=parseInt(document.forms["frmOrder"]["totalpoints"].value);