2013-12-20 65 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