我找不到任何可以在TABLE中动态计算的解决方案,其中INPUT是每行和每列的总和以及同时所有输入的总和。 我有这个HTML:
<table>
<thead>
<tr>
<th align=center>Ressource</th>
<th align=center>Jan. (22j)<br></th>
<th align=center>Fév. (20j)<br></th>
<th align=center>Mars (22j)<br></th>
<th align=center>Total:<br></th>
</tr>
</thead>
<tbody>
<tr class='alt' onMouseOver="this.className='highlight'" onMouseOut="this.className='alt'">
<td align=left>a</td>
<td align=right><input class='saisie' type='text' size=4 name='1347_1'></td>
<td align=right><input class='saisie' type='text' size=4 name='1347_2'></td>
<td align=right><input class='saisie' type='text' size=4 name='1347_3'></td>
<td align=right></td>
</tr>
<tr class='normal' onMouseOver="this.className='highlight'" onMouseOut="this.className='normal'">
<td align=left>b</td>
<td align=right><input class='saisie' type='text' size=4 name='4482_1'></td>
<td align=right><input class='saisie' type='text' size=4 name='4482_2'></td>
<td align=right><input class='saisie' type='text' size=4 name='4482_3'></td>
<td align=right></td>
</tr>
<tr class='alt' onMouseOver="this.className='highlight'" onMouseOut="this.className='alt'">
<td align=left>c</td>
<td align=right><input class='saisie' type='text' size=4 name='7969_1'></td>
<td align=right><input class='saisie' type='text' size=4 name='7969_2'></td>
<td align=right><input class='saisie' type='text' size=4 name='7969_3'></td>
<td align=right></td>
</tr>
<tr class="totalColumn">
<td></td>
<td class="totalCol" align=right>Total:</td>
<td class="totalCol" align=right></td>
<td class="totalCol" align=right></td>
<td class="totalCol" align=right></td>
<td class="totalCol" align=right></td>
</tr>
</tbody>
</table><span id=sum name sum></span>
和JQuery
$(document).ready(function(){
$(".saisie").each(function() {
$(this).keyup(function(){
calculateSum();
});
});
for (i=0;i<$('#sum_table tr:eq(0) td').length;i++) {
var total = 0;
$('.saisie:eq(' + i + ')', 'tr').each(function(i) {
total = total + parseFloat($(this).text());
});
$('#sum_table tr:last td').eq(i).text(total);
}
});
function calculateSum() {
var sum = 0;
$(".saisie").each(function() {
//add only if the value is number
if(!isNaN(this.value) && this.value.length!=0) {
sum += parseFloat(this.value);
}
});
$("#sum").html(sum.toFixed(2));
}
所以全局Sum工作,但是所有colums和所有行的总和。我不知道。
有什么想法吗?帮助
答案 0 :(得分:0)
尝试以下代码:使用参数calculateTotal
添加index
函数。通过传递td
的父input
的索引来调用此函数。现在计算具有相同索引的所有td
的总和,并将其放在相同索引的总td
中。从calculateSum
函数调用calculateTotal
。
注意 - 我修改了calculateSum
函数以避免不必要的long for循环(仅从td
计算total
)
$(document).ready(function(){
$(".saisie").each(function() {
$(this).keyup(function(){
calculateTotal($(this).parent().index());
});
});
});
function calculateTotal(index)
{
var total = 0;
$('table tr td').filter(function(){
if($(this).index()==index)
{
total += parseFloat($(this).find('.saisie').val())||0;
}
}
);
$('table tr td.totalCol:eq('+index+')').html(total);
calculateSum();
calculateRowSum();
}
function calculateSum() {
var sum = 0;
$("td.totalCol").each(function() {
sum += parseFloat($(this).html())||0;
});
$("#sum").html(sum.toFixed(2));
}
function calculateRowSum()
{
$('table tr:has(td):not(:last)').each(function(){
var sum = 0;
$(this).find('td').each(function(){
sum += parseFloat($(this).find('.saisie').val()) || 0;
});
$(this).find('td:last').html(sum);
});
}
<强> JSFiddle DEMO 强>
注意 - 我已从最后一行删除了第一个td
以进行列对齐。