我有一个带有输入框列的HTML表格,并且希望自动显示框中值的总和(即,不更改总和按钮并更新,因为框中的值已更改)。表中的行数因为通过速度动态创建而变化。下面是一个示例HTML表,我想要显示容量行中的值的总和。我不确定从哪里开始,我尝试过很多JavaScript代码并且无法正常工作。
<table border = "1" id = "table">
<TR>
<TH>Resource</TH>
<TH>Vacation</TH>
<TH>Allocation</TH>
<TH>Holidays</TH>
<TH>Capacity</TH>
<TH>Remainder</TH>
</TR>
#foreach($user in $userList)
<tr>
<td>$user.resource</td>
<td><input type=text name="vacation" size="6" maxlength="10"></td>
<td><input type=text name="alloc" size="6" maxlength="10"></td>
<td><input type=text name="holidays" size="6" maxlength="10"></td>
<td><input type=text name="capacity" size="6" maxlength="10"></td>
<td><input type=text name="remainder" size="6" maxlength="10"></td>
</tr>
#end
<tr>
<td>Total:</td>
<td></td><td></td><td></td>
<td class= "capsum"><input type="text" name="captotal" size="6" maxlength="10"></td>
<td><input type="text" name="remtotal" size="6" maxlength="10"></td>
</tr>
</table>
表中将有多行,而capacity列中的每个输入框都共享相同的名称。因此,Capacity列的总和应显示在“capsum”输入框中,并应自动计算并在输入框中的值更改时更新。
答案 0 :(得分:1)
这样的事情:
$('table#table input[name=capacity]').change(function()
{
var sum = 0;
$('table#table input[name=capacity]').each(function()
{
sum += parseInt($(this).val());
});
$('input[name=captotal]').val(sum);
});
答案 1 :(得分:0)
挂钩change
event,最好table level。然后总结所有值:
var updatefns = {};
jQuery.each(["vacation", "alloc" ,"holidays", "capacity", "remainder"], function(i, name) {
// cache all the elements
var head = $("#table tr:first th:nth-child("+i+")"); // kind of selector
var inputs = $("#table input[name=\""+name+"\"]");
updatefns[name] = function() {
var sum = 0;
inputs.each(function(){
sum+=parseInt(this.value) || 0;
});
// set new text:
head.text(name.charAt(0).toUppercase+name.substr(1)+": "+sum);
};
});
$("#table").change(function(e){
var t, n;
if ((t = e.target) && (n = t.name) && n in updatefns)
updatefns[n]();
});
您可以使用更好的选择器来更新头细胞,也可以给它们一个相应的属性来选择它们。当然,您可以自由更改新文本的设置方式。
答案 2 :(得分:-1)
您需要为需要求和的表单字段分配onChange JavaScript事件要处理的函数。
然后,此函数将简单地读出每个字段的值,计算总和,然后将其存储回需要的位置。
答案 3 :(得分:-1)
如果你有jQuery试试:
<table onchange="reloadSum()"></table>
var reloadSum = function() {
var sums = $('.toBeSummed'); // this will need to be the class of the things you want to sum
var sum = 0;
for (var i = 0; i < sums.length; i++) {
sum += parseFloat(sums[i].value);// or maybe parseFloat(sums[i].innerHTML)
}
$('#capsum').text(sum);
}
如果你没有jQuery get jQuery然后这样做。