2010-07-22 97 views
1

我有正在增加表格行和3列,每個單元格包含文本框。我想將前2列的值總和爲每行的第3列。我怎麼能用jQuery來做到這一點?jquery中如何將表單元素逐列逐列求和?

讓我更直觀:

 c1 c2 s 
r1 5  6 11 
r2 7  3 10 
.  .  . . 
s sc1 sc2 sc3 

SC1,SC2,SC3是相關列的總和,你看。

回答

0

你應該建立你的表是這樣的:

<table class="summonizer"> 
    <thead> 
    <tr> 
     <th></th> 
     <th>c1</th> 
     <th>c2</th> 
     <th>s</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <th>r1</th> 
     <td><input type="text" value="5"/></td> 
     <td><input type="text" value="6"/></td> 
     <td></td> 
    </tr> 
    <tr> 
     <th>r2</th> 
     <td><input type="text" value="7"/></td> 
     <td><input type="text" value="3"/></td> 
     <td></td> 
    </tr> 
    </tbody> 
    <tfoot> 
    <tr> 
     <th>s</th> 
     <td></td> 
     <td></td> 
     <td></td> 
    </tr> 
    </tfoot> 
</table> 

而JavaScript應該是這樣的:

function summonize_table($table) { 
    var col_sums = []; 
    var row_sums = []; 
    var all_sum = 0; 
    $table.find('tbody tr').each(function(row){ 
    row_sums[row] = 0; 
    $(this).find('td input[type=text]').each(function(column){ 
     value = parseInt(this.value); 
     row_sums[row] += value; 
     if (!col_sums[column]) col_sums[column] = 0; 
     col_sums[column] += value; 
     all_sum += value; 
    }); 
    }); 
    $.each(row_sums,function(index,value){ 
    $table.find('tbody tr:eq('+index+') td:last').html(value); 
    }); 
    $.each(col_sums,function(index,value){ 
    $table.find('tfoot tr td:eq('+index+')').html(value); 
    }); 
    $table.find('tfoot tr td:last').html(all_sum); 
} 
$(function(){ 
    $('table.summonizer input[type=text]').live('change',function(){ 
    summonize_table($(this).closest('table')); 
    }); 
    $('table.summonizer input[type=text]:first').trigger('change'); 
}); 

這裏你可以看到一個工作示例:http://jsfiddle.net/my9DF/

+0

一一點點超出了我的jQuery理解,但工作。謝謝 – edib 2010-07-22 08:10:18

+0

你有什麼特別不明白的?也許我可以幫助你理解。 – jigfox 2010-07-22 09:45:19

+0

我是新來的jquery,但我在一個項目中使用jquery生成一個項目。我的問題是:讓最後的colums和rows成爲總和,代碼是什麼? 我的意思是3 * 3列textfield和最後一個是總和 – edib 2010-07-26 13:36:03

0

快速和粗略的版本 - 對於每個TR,將其子TD的內容轉換爲數字並進行求和,然後當求和完成時,以「sum」值作爲文本結束時彈出TD。

$("tr").each(function() { 
    var sum = 0; 
    $("td", $(this)).each(function() { 
     sum += Number($(this).text()); 
    }); 
    $(this).append($("<td>").text(sum)); 
});