2012-03-09 84 views
4

我看了很多不同的這個問題的變化,但我似乎無法找到一個特定於我正在做的事情。javascript數組的總和值?

我有輸入字段是動態的由php/mysql查詢創建的。該值是數字,他們都有一個共同的類

<?php 
    foreach ($garment_sizes as $key =>$value){echo '<input type="number" class="size_select" name="'.$value.'" onchange="qty_update()"/><label class="size_label">'. strtoupper($value).'</label>'; 
    } 
?> 

生成的HTML:

<input type="number" class="size_select" name="s" onchange="qty_update()"/> 
<label class="size_label">S</label> 
<input type="number" class="size_select" name="m" onchange="qty_update()"/> 
<label class="size_label">M</label> <!-- etc --> 

我想創建一個函數來彙總所有此類「size_select」領域

function qty_update(){ 
    var values = $('.size_select').serializeArray(); 
    //having trouble writing the loop here to sum the array.. 
} 
+0

只是好奇,爲什麼你需要序列化? JSON? – j08691 2012-03-09 01:04:02

+0

好吧,我過去幾個月一直在試圖學習jquery,所以當我想要做新的事情時,它就是我去的第一個地方。我願意提供更好的解決方案。 – 2012-03-09 01:05:39

+0

爲什麼你需要序列化? – 2012-03-09 01:14:52

回答

9

要總結所有匹配特定選擇器的字段,可以這樣做:

var total = 0; 
$('.size_select').each(function() { 
    total += parseInt($(this).val(), 10) || 0; 
}); 

// the variable total holds the sum here 

在函數形式:

function sumSizes() { 
    var total = 0; 
    $('.size_select').each(function() { 
     total += parseInt($(this).val(), 10) || 0; 
    }); 
    return(total); 
} 
+0

哇,這幾乎就是我發佈的內容。 – nrabinowitz 2012-03-09 01:21:25

+0

謝謝jfriend00。函數形式起作用。你能幫我理解嗎? 0?這是幹什麼的? – 2012-03-09 01:28:53

+1

@DanielHunter - 看到這些問題:http://stackoverflow.com/questions/9380039/default-parseint-radix-to-10和http://stackoverflow.com/questions/850341/workarounds-for-javascript-parseint-八進制錯誤 – 2012-03-09 01:30:12

4

這裏有一個快速的方法。需要注意的是,如果你使用jQuery,你通常應該使用jQuery來分配事件處理程序,因爲它比這樣直接在HTML標記做更加靈活:

$('input.size_select').change(function() { 
    var sum = 0; 
    $('input.size_select').each(function() { 
     sum += parseInt($(this).val()) || 0 
    }); 
    console.log(sum); 
}); 
+0

upvote for jquery .change建議..謝謝。 – 2012-03-09 01:29:55

+0

不應該'parseInt($(this).val)'是'parseInt($(this).val())'? – j08691 2012-03-09 16:17:02

+0

@ j08691 - 燁,謝謝 - 修正上面。 – nrabinowitz 2012-03-09 22:24:39