Javascript 如何从row Total中获取总计

Javascript 如何从row Total中获取总计,javascript,Javascript,我是javascript新手。我有一张桌子,上面有产品价格、数量、宽度和高度。发票中只有一行,有一个按钮用于添加新行和删除行。我分别得到了每行的总数。现在我想从所有产品的总数中得到总数。添加产品总计后,我想将此发票存储在数据库中。请给我一个更好的解决方案。提前谢谢。问候 <!DOCTYPE html> <html> <head> <title></title> <style> table,tr,td,th {

我是javascript新手。我有一张桌子,上面有产品价格、数量、宽度和高度。发票中只有一行,有一个按钮用于添加新行和删除行。我分别得到了每行的总数。现在我想从所有产品的总数中得到总数。添加产品总计后,我想将此发票存储在数据库中。请给我一个更好的解决方案。提前谢谢。问候

<!DOCTYPE html>
<html>
<head>
    <title></title>
<style>
    table,tr,td,th { border: 1px black solid;}

</style>
</head>

<body>
<table>
  <thead>
    <th>Price</th>
    <th>Quantity</th>
    <th>Width</th>
    <th>Height</th>
    <th>Total</th>
    <th>Action</th>
  </thead>

  <tbody id="product_table">
    <tr>
        <td><input type="text" name="price"></td>
        <td><input type="text" name="quantity"></td>
        <td><input type="text" name="width"></td>
        <td><input type="text" name="height"></td>
        <td><input type="text" name="total" readonly></td>
        <td><input type="button" value="X" onclick="deleteRow(this)"/></td>
    </tr>

  </tbody>
    <input type="button" name="submit" value="Add Row" onclick="add_fields();">

</table>
<span>Grand Total<input type="text" name="grandtotal" readonly></span>
</body>

<script>

const table = document.getElementById('product_table');
table.addEventListener('input', ({ target }) => {
  const tr = target.closest('tr');
  const [price, quantity, width, height, total] = tr.querySelectorAll('input');

  var size = width.value * height.value;
  var rate = price.value * quantity.value;

  if (size != "") {
    total.value = size * rate;
  }else{
    total.value = rate; 
  }
});

function add_fields() {
  var row = document.createElement("tr");
  row.innerHTML =
    '<td><input type="text" name="price"></td>' +
    '<td><input type="text" name="quantity"></td>' +
    '<td><input type="text" name="width"></td>' +
    '<td><input type="text" name="height"></td>' +
    '<td><input type="text" name="total" readonly></td>' +
    '<td><input type="button" value="X" onclick="deleteRow(this)"/></td>';

  table.appendChild(row);
}

function deleteRow(btn) {
  var row = btn.parentNode.parentNode;
  row.parentNode.removeChild(row);
}

</script>
</html>
这是你的工作代码

希望它对你有用


查看此演示:

我建议您在服务器上而不是在客户端上进行计算。最后,你会有一个攻击向量,把伪造的发票总数发送到你的数据库并存储它们。因此,请在服务器端执行计算,以确保计算过程不受操作。我希望在客户端执行此计算。这是app的要求。请给出客户端计算的解决方案。是否需要jquery库?添加jquery脚本后,代码运行良好。谢谢您的帮助。请提供一个解决方案,以便在按“提交”按钮后将此发票添加到数据库中。
<!DOCTYPE html>
<html>
<head>
    <title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js</script>
<style>
    table,tr,td,th { border: 1px black solid;}

</style>
</head>

<body>
<table>
  <thead>
    <th>Price</th>
    <th>Quantity</th>
    <th>Width</th>
    <th>Height</th>
    <th>Total</th>
    <th>Action</th>
  </thead>

  <tbody id="product_table">
    <tr>
        <td><input type="text" name="price"></td>
        <td><input type="text" name="quantity"></td>
        <td><input type="text" name="width"></td>
        <td><input type="text" name="height"></td>
        <td><input type="text" name="total" class="totalPrice" readonly></td>
        <td><input type="button" value="X" onclick="deleteRow(this)"/></td>
    </tr>

  </tbody>
    <input type="button" name="submit" value="Add Row" onclick="add_fields();">

</table>
<span>Grand Total<input type="text" name="grandtotal" id="grandtotal" readonly></span>
</body>

<script>

const table = document.getElementById('product_table');
table.addEventListener('input', ({ target }) => {
  const tr = target.closest('tr');
  const [price, quantity, width, height, total] = tr.querySelectorAll('input');

  var size = width.value * height.value;
  var rate = price.value * quantity.value;

  if (size != "") {
    total.value = size * rate;
  }else{
    total.value = rate; 
  }
  totalPrice();
});

function add_fields() {
  var row = document.createElement("tr");
  row.innerHTML =
    '<td><input type="text" name="price"></td>' +
    '<td><input type="text" name="quantity"></td>' +
    '<td><input type="text" name="width"></td>' +
    '<td><input type="text" name="height"></td>' +
    '<td><input type="text" name="total"  class="totalPrice" readonly></td>' +
    '<td><input type="button" value="X" onclick="deleteRow(this)"/></td>';

  table.appendChild(row);
}

function deleteRow(btn) {
  var row = btn.parentNode.parentNode;
  row.parentNode.removeChild(row);
  totalPrice();
}
function totalPrice(){
var sum = 0;
 $(".totalPrice").each(function(){
 sum += parseFloat($(this).val());
});
$("#grandtotal").val(sum);
}

</script>
</html>