Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript计算可变数量的html表列的总和_Javascript_Jquery_Html_Forms - Fatal编程技术网

使用Javascript计算可变数量的html表列的总和

使用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=""

我有一个有很多列的表,每一列都由一个文本字段组成,其中包含一个可以更改的数值。表的最后一列必须包含所有列的总和。现在我的问题是:如何使用javascript实时更改总和?例如,如果修改了列值,则必须更改总和以适应新值

以下是我的表格:

<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);
});