2012-10-22 60 views
-1

這對我來說很奇怪。一些小的語法錯誤或什麼的。簡單地添加兩個變量的值並將它們追加到第三個變量。jQuery添加變量總數

var total = 0; 

input.each(function(){ 

    var thiis = $(this), 
     cost = thiis.attr('data-cost'); 

    if (thiis.prop('checked')){ 

     total = total + cost; 
    } else { 

     total = total - cost; 
    } 
} 

所以,如果cost = 5和輸入checked然後total等於5。相反,我越來越05


更新:

話,就是價值觀arn't整數,所以他們要追加。而不是做一些奇特的字符串整數翻轉,有沒有辦法讓我抓住數據屬性作爲一個整數從一開始?

謝謝!

+3

當然,你沒有總數= 5'''或類似的東西?如果一個字符串是串接而不是添加。 –

+1

在這裏返回10 http://jsfiddle.net/j08691/gNZh9/ – j08691

+0

只是使用'.data()'方法而不是'.attr()'''.data()'使得每一次嘗試都正確地轉換值,而'.attr()'只返回一個字符串。此外,您只需要執行.data('cost')'而不是'.attr('data-cost')'。 – ahren

回答

0

如果某些地方的這些變量作爲字符串輸出,那麼您需要一個整型轉換,這就是不一致結果的原因。

,你可以做到這total += parseInt(each);

0

一個(或兩個)的值必須被指定爲一個字符串。如果你看到這個有很多,你可以通過(強制)鑄造了一些避免它:

function add(){ 
    var total = 0; 
    for (var a = 0; a < arguments.length; a++){ 
    var n = new Number(arguments[a]); 
    //console.log(arguments[a] + '=' + n); 
    if (isNaN(n)){ 
     throw "Argument " + a + " is not a number."; 
    } 
    total += n; 
    } 
    return total; 
} 

add('1', 2, 3.5); 

這是一個解決的實際問題(如果這些都是,其實數字,你需要明白爲什麼它是他們的字符串)但這會讓你得到你想要的結果:

total = add(total,each); 
+0

謝謝你的徹底答案..去反思,因爲它是一個現有的方法 – technopeasant

+0

@technopeasant:使用'新的數字()'也是「現有」。 (這是每個數字的來源)。請記住,'parseInt'只適用於整數。如果你的數字有小數,你需要使用'parseFloat'。而且,如果在任何時候'總數'是一個字符串,這將永遠不重要。 –