2011-08-25 90 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