我有以下jquery if \ else比较,根据结果评估部分代码,
if($('#order_quantity').val() < $('#available_quantity').val()) {
// ---code to run----
} else {
// --- code to show error---
}
此代码对输入正确工作3-4次,之后工作错误,
当$('#order_quantity').val() = 5
和$('#available_quantity').val() = 46
时,理想情况下 - 要运行的代码 - 应该执行但是它正在运行 - 代码显示错误 - < / strong> of else statement。
有时候它是正确的,有时却没有,我为上面的输入值创建了console.log
,输入是正确的,但仍然比较结果会产生错误的结果
这种比较可能有什么问题?
答案 0 :(得分:6)
从 DOM 读取的值为字符串。您需要将其转换为数字才能在算术运算中使用它,除非运算符强制操作数为数字。
if(+$('#order_quantity').val() < +$('#available_quantity').val())
您可以使用
将字符串转换为数字+
运算符,这会将字符串强制转换为数字。Number
功能parseFloat
parseInt
,但这会将浮点值转换为整数。此代码正确地为输入工作3-4次,之后它工作错误
代码适用于某些值,因为字符串的比较方式。
> "5" < "46" // false
字符串逐字符进行比较,就像排序工作一样。在此代码中,比较以'5' < '4'
完成,比较字符串时,将其ASCII值进行比较。由于5
的ASCII值大于4
的ASCII值,因此比较会返回false
。
答案 1 :(得分:4)
val()
返回一个字符串。您必须将这些字符串值转换为数字:
if(Number($('#order_quantity').val()) < Number($('#available_quantity').val())) {
// do something
} else {
// do something
}
表达式失败的示例:
"24" < "124"
false
还有其他方法可以将字符串转换为数字(请参阅What's the fastest way to convert String to Number in JavaScript?):
Number(x)
parseInt(x, 10)
(对于整数)parseFloat(x)
+x
; ~~x
(对于整数)x | 0
(对于整数) ...或使用Math
方法。 x
是字符串值。
答案 2 :(得分:2)
您需要将字符串转换为整数,因为使用jQuery val()方法读取的所有值都将作为字符串返回。
您也可以使用此代码 -
if(parseInt($('#order_quantity').val()) < parseInt($('#available_quantity').val()))
答案 3 :(得分:2)
$('#order_quantity').val()
的类型是字符串。 '5' > '46'
true
就像'b' > 'a'
true
一样if (parseInt($('#order_quantity').val()) < parseInt($('#available_quantity').val()))
{
//---code to run----
}
else
{
//--- code to show error---
}
。要将字符串值转换为int值,可以使用 parseInt 函数。要获得预期的结果,您的代码应该是:
{{1}}
答案 4 :(得分:2)
试试这些解决方案:
var order_quantity = $('#order_quantity').val();
var available_quantity = $('#available_quantity').val();
if( Number( order_quantity ) < Number( available_quantity ) )
{ //---code to run---- }
else
{ //--- code to show error---}
或强>
if (order_quantity - available_quantity < 0)
{ //---code to run---- }
else
{ //--- code to show error---}
这会强制javascript处理数值计算。字符串将转换为数字。