Рассчитать общую стоимость для нескольких строк

0

Я пытаюсь рассчитать цену для нескольких строк. Я работаю в одной строке, но функция onchange не работает, когда я помещаю ее в цикл for. Кто-нибудь знает, почему это так?

JavaScritpt:

function cal()
{
    var price = document.getElementById('priceper_0').value;
    var per_pack = document.getElementById('per_pack_0').value;
    var quantity = document.getElementById('quantity_0'.value;


    document.getElementById('subtotal_0').value = ((price/per_pack)*quantity).toFixed(2);


}

PHP/HTML:

<table>
<tr>
<td>Paper</td>
<td align="center">Price</td>
<td align="center">Per Pack</td>
<td align="center">Quantity</td>
<td align="center">Sub Total</td>
</tr>

<tr class="multipp">
<td><input type="text" name="description_0" id="description_0" size="85" maxlength="70" value="<?php echo htmlspecialchars($description[0]); ?>" /></td>
<td><input type="text" name="priceper_0" id="priceper_0" size="10" maxlength="9" value="" /></td>
<td><input type="text" name="per_pack_0" id="per_pack_0" size="10" maxlength="9" value="" /></td>
<td><input type="text" name="quantity_0" id="quantity_0" size="10" maxlength="9" onChange="cal();"/></td>
<td><input type="text" name="subtotal_0" id="subtotal_0" class="txt" size="15" maxlength="9" value="" /></td>
</tr>

<?php
for($i=1; $i<10; $i++) 
{
 echo '<tr class="multipp">';
echo '<td><input type="text" name="description_'.$i.'" id="description_'.$i.'" size="85" maxlength="70" value="'.htmlspecialchars($description[$i]).'" /></td>';
echo '<td><input type="text" name="priceper_'.$i.'" id="priceper_'.$i.'" size="10" maxlength="9" value="'.htmlspecialchars($priceper[$i]).'" /></td>';
echo '<td><input type="text" name="per_pack_'.$i.'" id="per_pack_'.$i.'" class="txt" size="10" maxlength="9" value="'.htmlspecialchars($priceper[$i]).'" /></td>';
echo '<td><input type="text" name="quantity_'.$i.'" id="quantity_'.$i.'" size="10" maxlength="9" onChange="cal();" value="'.htmlspecialchars($quantity[$i]).'" /></td>';
echo '<td><input type="text" name="subtotal_'.$i.'" id="subtotal_'.$i.'" size="15" maxlength="9" value="'.htmlspecialchars($subtotal[$i]).'" /></td>';
echo '</tr>';
}
?>
</table>
Теги:

5 ответов

2

Причина - проблема id, вы должны использовать уникальный идентификатор для элементов

Попробуйте с этим

Передайте свой $i функции calc() затем выполните функцию, как показано ниже

onChange=cal($i)

функция

function cal($i)
{
    var price = document.getElementById('priceper_'+$i+'').value;
    var per_pack = document.getElementById('per_pack_'+$i+'').value;
    var quantity = document.getElementById('quantity_'+$i+'').value;


    document.getElementById('subtotal_'+$i+'').value = ((price/per_pack)*quantity).toFixed(2);


}
  • 0
    мне нужно изменить идентификаторы в <td> <input /> </ td>, чтобы они соответствовали идентификаторам в функции?
  • 0
    yes @ user3009232 передайте i функции, затем попробуйте вышеуказанный метод
Показать ещё 1 комментарий
0

function getTotal($i)
{
var price = document.getElementById('priceper_'+$i+'').value;
var per_pack = document.getElementById('per_pack_'+$i+'').value;
var quantity = document.getElementById('quantity_'+$i+'').value;

document.getElementById('subtotal_'+$i+'').value = ((price/per_pack)*quantity);
}
<table>
<tr>
<td>Paper</td>
<td align="center">Price</td>
<td align="center">Per Pack</td>
<td align="center">Quantity</td>
<td align="center">Sub Total</td>
</tr>
<tr class="multipp">
<td><input type="text" name="description_0" id="description_" size="85" maxlength="70" value="<?php echo htmlspecialchars($description[0]); ?>" /></td>
<td><input type="text" name="priceper_0" id="priceper_" size="10" maxlength="9" value="" /></td>
<td><input type="text" name="per_pack_0" id="per_pack_" size="10" maxlength="9" value="" /></td>
<td><input type="text" name="quantity_0" id="quantity_0" size="10" maxlength="9" onChange="getTotal(<?php echo $i;?>);"/></td>
<td><input type="text" name="subtotal_0" id="subtotal_" size="15" maxlength="9" value="" /></td>
</tr>
<?php
for($i=1; $i<10; $i++)
{
  echo '<tr class="multipp">';
  echo '<td><input type="text" name="description_'.$i.'" id="description_'.$i.'" size="85" maxlength="70" value="'.htmlspecialchars($description[$i]).'" /></td>';
  echo '<td><input type="text" name="priceper_'.$i.'" id="priceper_'.$i.'" size="10" maxlength="9" value="'.htmlspecialchars($priceper[$i]).'" /></td>';
  echo '<td><input type="text" name="per_pack_'.$i.'" id="per_pack_'.$i.'" class="txt" size="10" maxlength="9" value="'.htmlspecialchars($priceper[$i]).'" /></td>';
  echo '<td><input type="text" name="quantity_'.$i.'" id="quantity_'.$i.'" size="10" maxlength="9" onChange="getTotal('.$i.');" value="'.htmlspecialchars($quantity[$i]).'" />'</td>';
  echo '<td><input type="text" name="subtotal_'.$i.'" id="subtotal_'.$i.'" size="15" maxlength="9" value="'.htmlspecialchars($subtotal[$i]).'" /></td>';
  echo '</tr>';
}
?>
</table>
  • 0
    все еще не работает
0

Я думаю, что с несколькими строками вы должны указывать номер строки вашей функции cal, чтобы она могла работать с правильной строкой, там не всегда число 0.

0

Вы можете добавить в поле ввода счет строки php, а затем от javascript взять это число и с помощью цикла for вычислить все строки. Посмотрите ниже код.

    <table>
    <tr>
    <td>Paper</td>
    <td align="center">Price</td>
    <td align="center">Per Pack</td>
    <td align="center">Quantity</td>
    <td align="center">Sub Total</td>
    </tr>

    <tr class="multipp">
    <td><input type="text" name="description_0" id="description_0" size="85" maxlength="70" value="<?php echo htmlspecialchars($description[0]); ?>" /></td>
    <td><input type="text" name="priceper_0" id="priceper_0" size="10" maxlength="9" value="" /></td>
    <td><input type="text" name="per_pack_0" id="per_pack_0" size="10" maxlength="9" value="" /></td>
    <td><input type="text" name="quantity_0" id="quantity_0" size="10" maxlength="9" onChange="cal();"/></td>
    <td><input type="text" name="subtotal_0" id="subtotal_0" class="txt" size="15" maxlength="9" value="" /></td>
    </tr>

    <?php
    for($i=1; $i<10; $i++) 
    {
     echo '<tr class="multipp">';
    echo '<td><input type="text" name="description_'.$i.'" id="description_'.$i.'" size="85" maxlength="70" value="'.htmlspecialchars($description[$i]).'" /></td>';
    echo '<td><input type="text" name="priceper_'.$i.'" id="priceper_'.$i.'" size="10" maxlength="9" value="'.htmlspecialchars($priceper[$i]).'" /></td>';
    echo '<td><input type="text" name="per_pack_'.$i.'" id="per_pack_'.$i.'" class="txt" size="10" maxlength="9" value="'.htmlspecialchars($priceper[$i]).'" /></td>';
    echo '<td><input type="text" name="quantity_'.$i.'" id="quantity_'.$i.'" size="10" maxlength="9" onChange="calSubTotal(<?=$i?>);" value="'.htmlspecialchars($quantity[$i]).'" /></td>';
    echo '<td><input type="text" name="subtotal_'.$i.'" id="subtotal_'.$i.'" size="15" maxlength="9" value="'.htmlspecialchars($subtotal[$i]).'" /></td>';
    echo '</tr>';
    }
    ?>
    </table>
<br />
Total: <input type="text" name="Total" id="Total" size="15" maxlength="9" value="" />
    <input type="hidden" name="rowcounter" id="rowcounter" value="<?=$i?>: />
    <?php /*In this example the row counter is alwase 10 */ ?>

Затем в коде javascript используйте цикл

function calAllRows()
{
    var rowsCounter = document.getElementById('rowcounter').value;
    vat totalValue = 0;
    for(var i=0;i<rowsCounter ;i++)
    {
      var price = document.getElementById('priceper_' + i + '').value;
      var per_pack = document.getElementById('per_pack_' + i + '').value;
      var quantity = document.getElementById('quantity_' + i + ''.value;
      totalValue += (price/per_pack)*quantity;
    }


    document.getElementById('Total').value = totalValue.toFixed(2);
}

function calSubTotal(var i)
{
     var subTotalValue = 0;

      var price = document.getElementById('priceper_' + i + '').value;
      var per_pack = document.getElementById('per_pack_' + i + '').value;
      var quantity = document.getElementById('quantity_' + i + ''.value;
      subTotalValue += (price/per_pack)*quantity;


    document.getElementById('Total').value = subTotalValue.toFixed(2);
}
0

вы также можете попробовать onblur, это означает, что вы оставите фокус текстового поля. какие массивы вы используете в своей форме, ваша форма генерирует штраф.

если форма сгенерирована отлично, вы можете сделать это так же, передайте свой $ я кал(), как, cal ($ i) для каждой строки вашего html.

function cal(ind)
{
    var price = document.getElementById('priceper_'+ind+').value;
    var per_pack = document.getElementById('per_pack_'+ind+').value;
    var quantity = document.getElementById('quantity_'+ind+'.value;


     document.getElementById('subtotal_'+ind').value = ((price/per_pack)*quantity).toFixed(2);


}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню