2013-10-08 42 views
0

下面的代碼塊在用戶向數量,價格和支付字段輸入數字後向服務器詢問調整後的帳戶餘額。將--10添加到字段會在服務器上引發錯誤。這就是爲什麼我添加了NaN支票adjustment === adjustment。這種方式只應在調整金額爲數字時才發送請求。由於某種原因,我仍然得到奇怪的東西被髮送到服務器像--10 ...NaN的Javascript測試

本質上,我只需要發送請求時,它實際上是一個數字。

var quantity = $("#id_quantity").val(); 
    var price = $("#id_price").val(); 
    var payment = $("#id_payment_amount").val(); 
    var adjustment = quantity * price - payment; 
    // Don't send if Not a number (NaN). 
    if (adjustment === adjustment) { 
     $.get("/balance_after_adjustment", {amount: adjustment}, function(response) { 
      $("span").text(response); 
     }); 
    } 
+2

'isNaN() ':https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN,和'Number.isNaN()':https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN – Ian

+1

您將以字符串形式獲取值,然後對其執行數學計算。我建議使用'parseFloat'或'parseInt'分別解析每個項目,這樣你就可以在對它們進行任何計算之前先獲得好數字。 –

+0

不過,別忘了在服務器端測試'amount'。否則一些「黑客」可能會克服Javascript檢查。 – Alex

回答

1

我可能會嘗試這樣的事情

var quantity = parseInt($("#id_quantity").val(),10), 
price = parseInt($("#id_price").val(),10), 
payment = parseInt($("#id_payment_amount").val(),10), 
adjustment = quantity * price - payment; 
if (!isNaN(adjustment)) { 
    $.get("/balance_after_adjustment", {amount: adjustment}, function(response) { 
     $("span").text(response); 
    }); 
} 
+1

沒有像那樣的isNaN()方法。 – epascarello

+0

很抱歉,在經過大約20次修改後,雖然 –

+2

修正了錯字,但您的答案是正確的。 – epascarello

-1

+的聲明之前,所以該方法val返回的字符串將被鑄造爲整數

var quantity = +$("#id_quantity").val(), 
    price = +$("#id_price").val(), 
    payment = +$("#id_payment_amount").val();