2013-01-08 23 views
1

我發現,當jQuery獲得一個值爲0(例如100)的路徑時,它將省略它。所以如果我比較5> 100,結果是真的。那麼我該如何解決這個問題? 這裏是HTML代碼:輸入值與0路徑之間的比較

<form id="target"> 
    <input type="text" id="max" value="100"/> 
    <input type="text" id="number" /> 
    <input id="submit" type="submit" value="submit" /> 
</form> 

這裏是jQuery的:

$('#target').submit(function() { 
    var a = $("#number").val(); 
    var b = $("#max").val(); 
    if(a > b){ 
    alert("exceed limit"); 
    } 

return false; 
}); 

在這裏你可以演示中看到:http://jsfiddle.net/yqMGG/91/

回答

3

你需要比較的數值,而不是字符串值。該.val()函數的輸出是一個DOMString值根據DOM Level 2它說:

interface HTMLInputElement : HTMLElement { 
    ... 
    attribute DOMString  value; 
    ... 
} 

所以你(5> 100)測試是真的"5" > "100"因爲字符串字典順序相比是如此。

的解決方案是改變

if(a > b){ 

if(+a > +b){ 

+前綴操作者脅迫其參數爲數字。

+0

不知道,非常感謝,非常快速的迴應。 –

0

使用parseFloat(),否則值被視爲字符串。

$('#target').submit(function() { 
    var a = parseFloat($("#number").val()); 
    var b = parseFloat($("#max").val()); 
    if(a > b){ 
    alert("exceed limit"); 
    } 

    return false; 
}); 

Demo

+0

謝謝,您的回答是正確的,但我接受Mike的答案作爲答案,因爲添加+符號更快,代碼更少。 :) –

0

您可以通過1乘以將其從字符串轉換爲數字,或者使用parseInt函數

var a = $("#number").val() * 1; 

OR

var a = parseInt($("#number").val(), 10); 

parseInt函數函數的第二個參數是基數。