求和Javascript多个字段

时间:2017-08-05 18:58:24

标签: javascript jquery sum

我再次使用javascript问题,我想问一下如何从字段中求和? 问题出在哪儿? 我想使用getElementsByNamegetElementsById来汇总所有字段。我想显示在名为total而没有刷新页面的下一个输入框中的子总输入框中输入的值的总和。 任何人都可以帮我弄清楚..? 这是我的代码

$(document).on('keyup', '.input', function() {
  var num1 = $(this).parents('tr:first').find('.input:first').val();
  var num2 = $(this).parents('tr:first').find('.input:last').val();
  $(this).parents('tr:first').find('.sub-total').val(to_rupiah(num1 * num2));

  var arr = document.getElementsByName('.sub-total');
  var tot = 0;
  for (var i = 0; i < arr.length; i++) {
    if (parseInt(arr[i].value))
      tot += parseInt(arr[i].value);
  }
  document.getElementById('TotalBayar').value = tot;
});
$(document).ready(function() {
  var index = 2;
  $("#addCF").click(function() {
    $("#customFields").append('<tr><td>' + index + '</td><td><input class="form-control" name="kode_barang[]" placeholder="Ketik Kode / Nama Barang" type="text"></td><td><input class="form-control input input1" name="harga_satuan[]" id="input1" value="" type="text"></td><td><input class="form-control input input2" id="input2" name="jumlah_beli[]" type="text"></td><td><input class="form-control sub-total" name="sub_total[]" onblur="findTotal()" value="" id="output" type="text"></td><td><button class="remCF"><i class="fa fa-times" style="color:red;"></i></button></td></tr>');
    index++;
  });
  $("#customFields").on('click', '.remCF', function() {
    $(this).parent().parent().remove();
  });
});

function to_rupiah(angka) {
  var rev = parseInt(angka, 10).toString().split('').reverse().join('');
  var rev2 = '';
  for (var i = 0; i < rev.length; i++) {
    rev2 += rev[i];
    if ((i + 1) % 3 === 0 && i !== (rev.length - 1)) {
      rev2 += '.';
    }
  }
  return 'Rp. ' + rev2.split('').reverse().join('');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<table class='table table-bordered' id='customFields'>
  <thead>
    <tr>
      <th style='width:35px;'>#</th>
      <th style='width:210px;'>Nama Barang</th>
      <th style='width:120px;'>Harga</th>
      <th style='width:75px;'>Qty</th>
      <th style='width:125px;'>Sub Total</th>
      <th style='width:40px;'></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>
        <input class="form-control" name="kode_barang[]" id="cariBrg" placeholder="Ketik Kode / Nama Barang" type="text">
      </td>
      <td><input class="form-control input" name="harga_satuan[]" id="input1" value="" type="text"></td>
      <td><input class="form-control input" id="input2" name="jumlah_beli[]" type="text"></td>
      <td><input class="form-control sub-total" name="sub_total[]" id="output" onblur="findTotal()" type="text"></td>
      <td><button class="remCF"><i class="fa fa-times" style="color:red;"></i></button></td>
    </tr>
  </tbody>
</table>

<div class='alert alert-info TotalBayar'>
  <button id='addCF' class='btn btn-default pull-left'><i class='fa fa-plus fa-fw'></i> Baris Baru (F7)</button>
  <h2>Total : <span id='TotalBayar'>0</span></h2>

请帮助

1 个答案:

答案 0 :(得分:0)

getElementsByName(".sub-total")会查找name=".sub-total"的元素,但是你没有这个元素,它就是一个类。您可以使用$(".sub-total")来获取这些元素并循环遍历它们。

document.getElementById('TotalBayar').value = tot;

赢了,因为TotalBayar是DIV,.value仅对输入有效。使用$("#TotalBayar").text(tot)设置其内容。

您也无法在子总计字段中调用parseInt(),因为它们以Rp.开头。我使用了正则表达式来获取数值。

BTW,而不是.parents("tr:first"),您可以使用.closest("tr")

&#13;
&#13;
$(document).on('keyup', '.input', function() {
  var num1 = $(this).closest('tr').find('.input:first').val();
  var num2 = $(this).closest('tr').find('.input:last').val();
  $(this).closest('tr').find('.sub-total').val(to_rupiah(num1 * num2));

  var arr = document.getElementsByName('.sub-total');
  var tot = 0;
  $(".sub-total").each(function() {
    var val = parseInt($(this).val().match(/\d+/)[0]);
    if (val) {
      tot += val;
    }
  });
  $('#TotalBayar').text(tot);
});
$(document).ready(function() {
  var index = 2;
  $("#addCF").click(function() {
    $("#customFields").append('<tr><td>' + index + '</td><td><input class="form-control" name="kode_barang[]" placeholder="Ketik Kode / Nama Barang" type="text"></td><td><input class="form-control input input1" name="harga_satuan[]" id="input1" value="" type="text"></td><td><input class="form-control input input2" id="input2" name="jumlah_beli[]" type="text"></td><td><input class="form-control sub-total" name="sub_total[]" onblur="findTotal()" value="" id="output" type="text"></td><td><button class="remCF"><i class="fa fa-times" style="color:red;"></i></button></td></tr>');
    index++;
  });
  $("#customFields").on('click', '.remCF', function() {
    $(this).parent().parent().remove();
  });
});

function to_rupiah(angka) {
  var rev = parseInt(angka, 10).toString().split('').reverse().join('');
  var rev2 = '';
  for (var i = 0; i < rev.length; i++) {
    rev2 += rev[i];
    if ((i + 1) % 3 === 0 && i !== (rev.length - 1)) {
      rev2 += '.';
    }
  }
  return 'Rp. ' + rev2.split('').reverse().join('');
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<table class='table table-bordered' id='customFields'>
  <thead>
    <tr>
      <th style='width:35px;'>#</th>
      <th style='width:210px;'>Nama Barang</th>
      <th style='width:120px;'>Harga</th>
      <th style='width:75px;'>Qty</th>
      <th style='width:125px;'>Sub Total</th>
      <th style='width:40px;'></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>
        <input class="form-control" name="kode_barang[]" id="cariBrg" placeholder="Ketik Kode / Nama Barang" type="text">
      </td>
      <td><input class="form-control input" name="harga_satuan[]" id="input1" value="" type="text"></td>
      <td><input class="form-control input" id="input2" name="jumlah_beli[]" type="text"></td>
      <td><input class="form-control sub-total" name="sub_total[]" id="output" onblur="findTotal()" type="text"></td>
      <td><button class="remCF"><i class="fa fa-times" style="color:red;"></i></button></td>
    </tr>
  </tbody>
</table>

<div class='alert alert-info TotalBayar'>
  <button id='addCF' class='btn btn-default pull-left'><i class='fa fa-plus fa-fw'></i> Baris Baru (F7)</button>
  <h2>Total : <span id='TotalBayar'>0</span></h2>
&#13;
&#13;
&#13;