2013-12-20 98 views
2

我想在用户输入值时动态地对表格行进行求和。由于行数可以改变我想用一个PHP循环来实现这一点。我有问题让环路正常工作。例如,如果有两个单独的行相加,只有最后一行将被求和。在PHP循环中表行总和

<script type="text/javascript"> 
    var sumScoreF = function(a) { 
    var rowtotal = 0; 
    n = new Array(); 

    for (i = 1; i <= 3; i++) { 
     if (parseInt(document.getElementById(a + i).value) > 0) { 
      n[i] = parseInt(document.getElementById(a + i).value); 
      rowtotal += n[i]; 
     } 
    } 

    document.getElementById(a + 'total').value = rowtotal; 
}; 
</script> 

以下是单行和的例子。在输入值时总列继续相加。这是一个很好的效果,但没有必要。

<table> 
    <tr> 
    <td>col1</td> 
    <td>col2</td> 
    <td>col3</td> 
    <td>total</td> 
    </tr> 
    <tr> 
    <td> 
     <input name="p1g1" id="p1g1" type="text" value="" onChange="sumScoreF('p1g')" /> 
    </td> 
    <td> 
     <input name="p1g2" id="p1g2" type="text" value="" onChange="sumScoreF('p1g')" /> 
    </td> 
    <td> 
     <input name="p1g3" id="p1g3" type="text" value="" onChange="sumScoreF('p1g')" /> 
    </td> 
    <td> 
     <input name="p1gtotal" id="p1gtotal" type="text" value="" /> 
    </td> 
    </tr> 
</table> 

这里是我尝试循环使用PHP和JavaScript的额外的行。第一行不会总和,但第二行会。我认为问题是与JavaScript变量“m”在它直接到最后一行,但我不知道如何解决它。

<table> 
<tr> 
    <td>col1</td> 
    <td>col2</td> 
    <td>col3</td> 
    <td>total</td> 
</tr> 
<?php for($j=1;$j<=3;$j++) { ?> 
<script type="text/javascript"> 
    var k = <?php echo json_encode($j); ?>; 
    var m = 'p'+k+'g'; 
</script> 
<tr> 
    <td> 
     <input name="<?php echo 'p'.$j.'g1'; ?>" id="<?php echo 'p'.$j.'g1'; ?>" type="text" onChange="sumScoreF('m')" /> 
    </td> 
    <td> 
     <input name="<?php echo 'p'.$j.'g2'; ?>" id="<?php echo 'p'.$j.'g2'; ?>" type="text" onChange="sumScoreF('m')" /> 
    </td> 
    <td> 
     <input name="<?php echo 'p'.$j.'g3'; ?>" id="<?php echo 'p'.$j.'g3'; ?>" type="text" onChange="sumScoreF('m')" /> 
    </td> 
    <td> 
     <input name="<?php echo 'p'.$j.'gtotal'; ?>" id="<?php echo 'p'.$j.'gtotal'; ?>" type="text" /> 
    </td> 
</tr> 
<?php } ?> 

任何帮助是极大的赞赏。谢谢。

+1

这是做一个非常可怕的方式,但每次要覆盖'M'变量,你在PHP中循环,尝试将'$ j'附加到该变量的所有实例。否则,你的DOM绑定'onChange'调用不会将你想要传递到'sumScore'函数的正确变量作为目标 –

+0

如果你想在用户输入中添加'',你可能必须使用AJAX,除非你不'在数据库中需要额外的行信息,那么你可以使用JavaScript。 – PHPglue

+0

谢谢@scrowler。覆盖循环的每个迭代的m变量是有意的。当j是1时,m是p1g,p1gtotal应该(我认为!)显示第1行的总和。当我在第1行第1列中输入一个值时,p2gtotal立即在第2行列总数中显示一个零,第1行列总计不会当我在第2行输入一个值时,第2行开始正确合计,所以不会显示任何内容。它看起来像m变量直接到p2g并等待p2g值,并且p1g以某种方式被否定。我检查了m在循环中正确改变。 – MikeH

回答

0

使用PHP来呼应的onChange内循环变量javascript函数调用:

<table> 
    <tr> 
    <td>col1</td> 
    <td>col2</td> 
    <td>col3</td> 
    <td>total</td> 
    </tr> 
    <?php for($j=1;$j<=3;$j++) { ?> 
    <tr> 
    <td> 
     <input name="<?php echo 'p'.$j.'g1'; ?>" id="<?php echo 'p'.$j.'g1'; ?>" type="text" onChange="sumScoreF('<?php echo 'p'.$j.'g'; ?>')" /> 
    </td> 
    <td> 
    <input name="<?php echo 'p'.$j.'g2'; ?>" id="<?php echo 'p'.$j.'g2'; ?>" type="text" onChange="sumScoreF('<?php echo 'p'.$j.'g'; ?>')" /> 
    </td> 
    <td> 
    <input name="<?php echo 'p'.$j.'g3'; ?>" id="<?php echo 'p'.$j.'g3'; ?>" type="text" onChange="sumScoreF('<?php echo 'p'.$j.'g'; ?>')" /> 
    </td> 
    <td> 
    <input name="<?php echo 'p'.$j.'gtotal'; ?>" id="<?php echo 'p'.$j.'gtotal'; ?>" type="text" /> 
    </td> 
</tr> 
<?php } ?> 
+0

..然后单击复选标记以将此答案标记为已接受。 – Daedalus