2011-08-25 120 views
2

我正在修复由其他人编写的网站。代码真的很混乱,所以我恐怕不能在这里发布,但我相信我提供了足够的信息让你知道可能是错的。因为在这一点上我迷路了。jquery条件不起作用

1.我们得到最小值和最大值

parent_id = '<?php echo $parent_id; ?>'; 
api = '<?php echo $api; ?>'; 
    $.getJSON('getlimits.php', {'id': ""+parent_id+"", 'api': ""+api+""}, function(data) { 
     // Loop and assign Json (returned value) to our limit variables 
     $.each(data, function(key, val) { 
      min_limit = key; 
      max_limit = val; 
     }); 
    }); 

getlimits.php输出:

{"10":"15000"} 

2.我们检查的范围

amount = $('#quantity', this).val(); 

console.log(amount + ' - Max : ' + max_limit + ' Min : ' + min_limit); 

if (amount < min_limit) { 
    displayError("You can't order less than " + min_limit + " units",2000); 
    return false; 
} 
else if (amount > max_limit) { 
    displayError("You can't order more than " + max_limit + " units.",2000); 
    return false; 
} 

已记录结果;

800 - Max : 15000 Min : 10 

我输入了800个单位。它不应该给出任何错误,但我会得到以下错误;

您不能订购超过15000个单位。

我真的迷路了。日志显示正确的值,getlimits.php返回正确的值,但如果条件不起作用,则返回&。

如果有人能帮我解决这个问题,我会很高兴。

预先感谢您。

+1

你确定每个值是一个int?尝试在条件之前的每个值“parseInt”。 – yvan

回答

7

amount当您通过.val()获取它时,它不是一个整数。

所以调整这一行:

amount = $('#quantity', this).val(); 

amount = parseInt($('#quantity', this).val()); 

正如丹尼斯指出的那样,你将不得不parseInt你是从JSON抓住和值。 (min_limitmax_limit)。

正如丹尼斯指出的,您应该将10作为第二个参数添加到parseInt以确保它解析为十进制数。

所以:

$.each(data, function(key, val) { 
    min_limit = parseInt(key,10); 
    max_limit = parseInt(val,10); 
}); 

amount = parseInt($('#quantity', this).val(),10); 
+3

确实。 @Pixeler,你所看到的根本原因是字符串“800”不在*字母*顺序的字符串“10”和“15000”之间,这就是你正在测试的内容。 –

+2

JSON键是字符串,所以这也是必需的。它也有助于提供10作为parseInt()的第二个参数,所以它保证解析为十进制数(不是八进制,十六进制等)。 – Dennis

+0

谢谢你的帮助。 – Revenant

0

,请务必让parseInt(number, 10)得到的数值变量。看起来你正在比较字符串,它会给你比较数字的不同结果。第二个参数(10)是基数,它将确保您获得小数值。

您需要为min_limit和max_limit以及.val()调用执行此操作,该操作将始终返回一个字符串。

+0

谢谢你的帮助。 – Revenant

1

这是因为你是一个字符串比较字符串:

"800" > "15000" === true 

你需要至少一个(最好是两个)转换为数字与parseInt函数:

$.each(data, function(key, val) { 
    min_limit = parseInt(key); 
    max_limit = parseInt(val); 
}); 

amount = parseInt($('#quantity', this).val()); 
+0

谢谢你的帮助。 – Revenant