2009-08-12 81 views
0

为什么JavaScript中的数字值的“大于”比较不起作用?即使迷你号码小于最大号码,下面的示例也会保持返回正确。JavaScript不比较大于最大数值的最小值

mini和maxi是表单输入值。这个例子使用jQuery来获取值,但很容易被剥离。

var mini = $('form#filterPrice input.min').val(); //eg. 500 
var maxi = $('form#filterPrice input.max').val(); //eg. 1500 

if(mini.valueOf() > maxi.valueOf()) { //also used: mini > maxi 
    alert('test'); //alerts "test" even when mini is less than maxi 
$('form#filterPrice input.min').val(maxi); //should switch values if mini > maxi 
$('form#filterPrice input.max').val(mini); 
} 

更换 “迷你> MAXI” 与 “Math.max(迷你,马克西)==迷你” 工作正常。因此,下面做工作:

var mini = $('form#filterPrice input.min').val(); //eg. 500 
var maxi = $('form#filterPrice input.max').val(); //eg. 1500 

if(Math.max(mini, maxi) == mini) { 
    alert('test'); 
$('form#filterPrice input.min').val(maxi); 
$('form#filterPrice input.max').val(mini); 
} 
+1

Javascript可能会将mini和maxi视为字符串,只是将它们进行词汇比较。在这种情况下'500'大于'1500'。 尝试在比较之前将mini和maxi转换为整数。 – Karl 2009-08-12 14:58:21

回答

4

使用该线路从字符串

if(parseInt(mini.valueOf(),10) < parseInt(maxi.valueOf(),10)) { //also used: mini > maxi 

得到诠释sinve你从数值像绳子DOM比较。拳头你应该解析成Int,然后才能比较。 另外,最好把10作为第二参数,以确保数字将被解析为十进制。

+0

我想知道是否需要mini.valueOf()。相反,使用parseInt(mini,10)更快? – Andres 2009-08-13 15:33:14

+0

我想你是对的 – 2009-08-13 16:20:53

+0

记得使用mini.replace(“,”,“”);删除逗号或者没有任何值转换会起作用。 – 2013-03-28 20:47:04

0

在第一个例子中你比较字符串和"1500" < "500"。在第二个示例中,Math.max将值转换为数字。

+0

你可以明确地转换为整数使用:parseInt() – Karl 2009-08-12 14:59:35