2012-10-26 22 views
17

更大我要驗證這個javascript函數如果一個數比另一個數的JavaScript,如果數量超過數

function validateForm() { 
    var x = document.forms["frmOrder"]["txtTotal"].value; 
    var y = document.forms["frmOrder"]["totalpoints"].value; 

    if (x > y) { 
     alert("Sorry, you don't have enough points"); 
     return false; 
    } 
} 

這不是出於某種原因的工作更大。

如果我做alert(x)我得到1300和alert(y)給999

這個工程....

function validateForm() { 
    var x = 1300; 
    var y = 999; 

    if (x > y) { 
     alert("Sorry, you don't have enough points"); 
     return false; 
    } 
} 
+2

您正在比較字符串,而不是數字。 –

+0

@ user1689607比較數字字符串仍然有效,即「5」>「2」// true' –

+1

@MattStone:'「1300」>「999」; // false' –

回答

42

你應該把它們轉換成比較之前數。

嘗試:

if (+x > +y) { 
    //... 
} 

if (Number(x) > Number(y)) { 
    // ... 
} 

注:parseFloatpareseInt(用於比較整數,你需要指定基數)會給你NaN爲一個空字符串,與NaN相比將始終爲false,如果你不想把空串處理爲0,那麼你可以使用它們。

1

這樣做。

var x=parseInt(document.forms["frmOrder"]["txtTotal"].value); 
var y=parseInt(document.forms["frmOrder"]["totalpoints"].value); 
+2

指定您希望使用'base 10。 ..] [「txtTotal」] .value,10);' – Blender

3

你可以在 「投」 使用Number構造數..

var number = new Number("8"); // 8 number 

您也可以撥打parseInt函數內置函數:

var number = parseInt("153"); // 153 number 
+0

Ooops,使用Number作爲構造函數返回一個Number對象,並且一個對象只與自身「相等」,所以'new Number('7')= =新數字('7')'返回'false'。我想你的意思是把它作爲一個函數使用,所以'Number('7')== Number('7')'。 'parseInt'應該總是使用一個基數:'parseInt('153',10)'。 – RobG

+0

哦!你對@RobG說「==」! ..我測試了這些情況,並沒有問題,我認爲Number對象總是隱含地調用「toString()」(實際上,我認爲它在內部調用valueOf()方法): new Number('725')<新號碼('800'); //輸出爲真 新號碼('91')>新號碼('90'); //輸出結果爲真 新號碼('7')<新號碼('7'); //輸出虛假 新號碼('7')>新號碼('8'); //輸出虛假 新號碼('8')<新號碼('7'); //輸出false 但是對於等號,您需要: new Number('7')。valueOf()== new Number('7')。valueOf(); //輸出結果爲真 – edrian

1

你比較字符串。 JavaScript比較字符串每個字符的ASCII碼。

要了解爲什麼你假,看看charCodes:

"1300".charCodeAt(0); 
49 
"999".charCodeAt(0); 
57 

的比較是錯誤的,因爲比較字符串時,1字符代碼並不比9.

更大

解決的辦法是將字符串視爲數字。您可以使用多種方法:

parseInt(string, radix) 
parseInt("1300", 10); 
> 1300 - notice the lack of quotes 


+"1300" 
> 1300 


Number("1300") 
> 1300 
相關問題