javascript - 表格小计和总计不计算

标签 javascript jquery

我有一个包含表头和动态行添加的表格。

我想计算小计和总计。我成功创建了添加行。当我尝试输入数据时,总计未显示

我尝试了这样的方法,但不起作用

$(document).ready(function() {
  addRow();

  var $tblrows = $("#detailTable tbody tr");
  $tblrows.each(function(index) {
    var $tblrow = $(this);
    $tblrow.find('.Qty').on('change', function() {



      var qty = $tblrow.find("[name=Qty]").val();
      var price = $tblrow.find("[name=Price]").val();
      var subTotal = parseInt(qty, 10) * parseFloat(price);

      // alert("line1");

      if (!isNaN(subTotal)) {

        // alert("line2");

        $tblrow.find('.total').val(subTotal.toFixed(2));
        var grandTotal = 0;
        // alert("alert subtotal");

        $(".total").each(function() {
          var stval = parseFloat($(this).val());
          grandTotal += isNaN(stval) ? 0 : stval;
        });

        $('.grdtot').val(grandTotal.toFixed(2));
      }
    });
  });


  $("#detailTable input").focus(function() {
    $(this).parent().addClass("highlighted");

  });
});

function addRow() {
  var rowCount = $("#detailTable>tbody>tr").length;
  $("#detailTable>tbody").append('<tr><td><input name="ProductName" required></td><td><input name="Qty" class="Qty" required></td><td><input name="Price" required></td><td><input name="total" required></td><td><a onclick="deleteRow(' + rowCount + ')">Delete</a></td></tr>')
  $("tr:odd").css("background-color", "#ccc");
}
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<table class="table table-striped" id="detailTable">
  <thead>
    <tr>
      <div class="col-sm-2">
        <th>ProductName</th>
      </div>
      <div class="col-sm-2">
        <th>Qty</th>
      </div>
      <div class="col-sm-2">
        <th>Price</th>
      </div>
      <div class="col-sm-2">
        <th>Total</th>
      </div>
      <div class="col-sm-2">
        <th><button type="button" onclick="addRow()" class="btn btn-info">Add Row</button></th>
      </div>
    </tr>
  </thead>
  <tbody></tbody>
  <tfoot>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td><input type="text" class="grdtot" value="" name="" /></td>
    </tr>
  </tfoot>
</table>

最佳答案

几个问题。

这是一个使用委托(delegate)的解决方案,我修复了您丢失的总类并将总计更改为 ID 并删除了内联删除

$(document).ready(function() {
  addRow();

  $("#detailTable").on("input","tbody>tr input", function() {
    $("#detailTable tbody>tr").each(function(index) {
      var $tblrow = $(this);

      var qty = $tblrow.find("[name=Qty]").val();
      var price = $tblrow.find("[name=Price]").val();
      var subTotal = parseInt(qty, 10) * parseFloat(price);

      if (!isNaN(subTotal)) {


        $tblrow.find('.total').val(subTotal.toFixed(2));
        var grandTotal = 0;
        $(".total").each(function() {
          var stval = parseFloat($(this).val());
          grandTotal += isNaN(stval) ? 0 : stval;
        });

        $('#grdtot').val(grandTotal.toFixed(2));
      }
    });
  });

  $("#detailTable").on("click",".del",function(e) {
    e.preventDefault();
    $(this).closest("tr").remove();
  })
  $("#detailTable").on("focus","input", function() {
    $(this).closest("td").addClass("highlighted");
  });
});

function addRow() {
  var rowCount = $("#detailTable>tbody>tr").length;
  $("#detailTable>tbody").append('<tr><td><input name="ProductName" required></td><td><input name="Qty" class="Qty" required></td><td><input name="Price" required></td><td><input class="total" name="total" readonly></td><td><a class="del" href="#">Delete</a></td></tr>')
  $("tr:odd").css("background-color", "#ccc");
}
.highlighted { background-color: green }
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<table class="table table-striped" id="detailTable">
  <thead>
    <tr>
      <div class="col-sm-2">
        <th>ProductName</th>
      </div>
      <div class="col-sm-2">
        <th>Qty</th>
      </div>
      <div class="col-sm-2">
        <th>Price</th>
      </div>
      <div class="col-sm-2">
        <th>Total</th>
      </div>
      <div class="col-sm-2">
        <th><button type="button" onclick="addRow()" class="btn btn-info">Add Row</button></th>
      </div>
    </tr>
  </thead>
  <tbody></tbody>
  <tfoot>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td><input type="text" id="grdtot" value="" name="" /></td>
    </tr>
  </tfoot>
</table>

关于javascript - 表格小计和总计不计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51063174/

相关文章:

jquery每次延迟没有效果

javascript - JS获取Bootstrap下拉菜单的值

javascript - Express 中来自 React 子组件的 POST 请求

javascript - 不变违规 : Calling pop to route for a route that doesn't exist

javascript - ReactJS 可以渲染字符串吗?

javascript - angularjs ng-show 无法正常工作

javascript - jQuery 按数据属性选择元素意外结果

javascript - JQuery - 特定文本的点击事件?

jQuery - 检查元素是否可见并淡入

javascript - 获得最接近所选选项的最快方法