使用Javascript计算可变数量的html表列的总和
我有一个有很多列的表,每一列都由一个文本字段组成,其中包含一个可以更改的数值。表的最后一列必须包含所有列的总和。现在我的问题是:如何使用javascript实时更改总和?例如,如果修改了列值,则必须更改总和以适应新值 以下是我的表格:使用Javascript计算可变数量的html表列的总和,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,我有一个有很多列的表,每一列都由一个文本字段组成,其中包含一个可以更改的数值。表的最后一列必须包含所有列的总和。现在我的问题是:如何使用javascript实时更改总和?例如,如果修改了列值,则必须更改总和以适应新值 以下是我的表格: <table id="sum_table"> <tr> <td>Column 1</td> <td><input type="text" name="val1" value=""
<table id="sum_table">
<tr>
<td>Column 1</td>
<td><input type="text" name="val1" value="" /></td>
</tr>
<tr>
<td>Column 2</td>
<td><input type="text" name="val2" value="" /></td>
</tr>
<tr>
<td>Column 3</td>
<td><input type="text" name="val3" value="" /></td>
</tr>
[...]
<tr>
<td>Total</td>
<td><input type="text" name="total" value="" /></td>
</tr>
</table>
第1栏
第2栏
第3栏
[...]
全部的
谢谢。
<html>
<head>
<script type="text/javascript">
function calc()
{
var sum = parseFloat(document.getElementById('val1').value + document.getElementById('val2').value + document.getElementById('val3').value + [...]);
document.getElementById('total').value = sum;
}
</script>
</head>
<body>
<table id="sum_table">
<tr>
<td>Column 1</td>
<td><input type="text" id="val1" value="" OnTextChanged="javascript:calc()"/></td>
</tr>
<tr>
<td>Column 2</td>
<td><input type="text" id="val2" value="" OnTextChanged="javascript:calc()/></td>
</tr>
<tr>
<td>Column 3</td>
<td><input type="text" id="val3" value="" OnTextChanged="javascript:calc()/></td>
</tr>
[...]
<tr>
<td>Total</td>
<td><input type="text" id="total" value="" /></td>
</tr>
</table>
</body>
</html>
函数计算()
{
var sum=parseFloat(document.getElementById('val1')。value+document.getElementById('val2')。value+document.getElementById('val3')。value+[…]);
document.getElementById('total')。value=sum;
}
第1栏
第2栏
[...]
全部的
这应该是诀窍。编辑:
在评论中讨论后,这是最终版本:
ContextChanged与onChange有何不同?对于少量的列是可以的,但是如果有100列呢?您应该能够将它们放入一个数组中,然后计算所有值的总和。但我不知道怎么做。三十点,看起来不错,谢谢。我如何修改它以便只针对具有特定类的列?谢谢。你能在我的回答中说出演示的具体类别吗?我不确定你要在哪里添加这个类。(可能是对
tr
,但我想检查一下)忘记我之前的评论,当然你指的是tr
。你可以这样做:呵呵,不,实际上我在想一个添加到输入中的类,比如这里:非常感谢。这个很完美:)
$('#sum_table tr:not(.totalColumn) input:text').bind('keyup change', function() {
var $table = $(this).closest('table');
var total = 0;
var thisNumber = $(this).attr('class').match(/(\d+)/)[1];
$table.find('tr:not(.totalColumn) .sum'+thisNumber).each(function() {
total += +$(this).val();
});
$table.find('.totalColumn td:nth-child('+thisNumber+') input').val(total);
});
<table id="sum_table" width="600" border="0">
<tr>
<td>Sum 1</td>
<td>Sum 2</td>
<td>Sum 3</td>
</tr>
<tr>
<td><input type="text" name="textfield" id="textfield" class="sum1" /></td>
<td><input type="text" name="textfield2" id="textfield2" class="sum2" /></td>
<td><input type="text" name="textfield3" id="textfield3" class="sum3"/></td>
</tr>
<tr>
<td><input type="text" name="textfield4" id="textfield4" class="sum1" /></td>
<td><input type="text" name="textfield5" id="textfield5" class="sum2" /></td>
<td><input type="text" name="textfield6" id="textfield6" class="sum3" /></td>
</tr>
<tr>
<td><input type="text" name="textfield7" id="textfield7" class="sum1" /></td>
<td><input type="text" name="textfield8" id="textfield8" class="sum2"/></td>
<td><input type="text" name="textfield9" id="textfield9" class="sum3"/></td>
</tr>
<tr>
<td>Total</td>
<td>Total</td>
<td>Total</td>
</tr>
<tr class="totalColumn">
<td><input type="text" name="textfield10" id="textfield10" /></td>
<td><input type="text" name="textfield11" id="textfield11" /></td>
<td><input type="text" name="textfield12" id="textfield12" /></td>
</tr>
<tr>
<td>bla</td>
<td>bla</td>
<td>bla</td>
</tr>
</table>
$('#sum_table tr:not(:last-child)').bind('keyup change', function() {
var $table = $(this).closest('table');
var total = 0;
$table.find('tr:not(:last-child) input:text').each(function() {
total += +$(this).val();
});
$table.find('input[name="total"]').val(total);
});