在每个函数jquery中设置另一个元素值

Set another element value in each function jquery

本文关键字:设置 另一个 元素 jquery 函数      更新时间:2023-09-26

我想在每个函数的元素中设置另一个元素值。我的脚本(JS):

function getTotal() { $(':input[id^="barang_qty[]"]').keyup(function() {
var total = 0;
var $inputs = $(':input[id^="barang_qty[]"]');
$inputs.each(function (index) { total += parseFloat($(this).val()) *  parseFloat($(this).attr('data-price'));
         $("#barang_total[]").val(total); 
     });  
$('#total').val(total); 
}); 

HTML:

<td class="price">
                    <input type="text" name="barang_unit_price[]" readonly id="barang_unit_price[]" class="form-control">
                    </td>
                    <td>
                    <input type="text" name="barang_qty[]" id="barang_qty[]" onkeyup="getTotal()" class="form-control" >
                    </td>
                    <td>
                    <input type="text" name="barang_total[]" class="sum form-control" >
                    </td>

但是元素barang_total仍然是空的。

问候,谢谢

问题是在getTotal方法中添加了一个keyup处理程序,所以第一个keyup不进行任何计算。

相反,您可以在getTotal()方法中使用内联调用进行计算

function getTotal() {
  var total = 0;
  var $inputs = $('input[name="barang_qty[]"]');
  $inputs.each(function(index) {
    var sum = parseFloat($(this).val()) * parseFloat($(this).attr('data-price')) || 0;
    total += sum;
    $(this).closest('tr').find('[name="barang_total[]"]').val(sum);
  });
  $('#total').val(total);
}

或者使用dom就绪处理程序来注册事件处理程序,而不是使用内联事件处理程序。

<input type="text" name="barang_qty[]" id="barang_qty[]" class="form-control" >

然后

jQuery(function() {
  $('input[name="barang_qty[]"]').keyup(function() {
    var total = 0;
    var $inputs = $('input[name="barang_qty[]"]');
    $inputs.each(function(index) {
      var sum = parseFloat($(this).val()) * parseFloat($(this).attr('data-price')) || 0;
      total += sum;
      $(this).closest('tr').find('[name="barang_total[]"]').val(sum);
    });
    $('#total').val(total);
  });
})

注意:如果您正在处理动态元素,那么您将不得不使用事件委派

演示:Fiddle

尝试这个

    function getTotal() { $(':input[id^="barang_qty[]"]').keyup(function() {
      var total = 0;
      var $inputs = $(':input[id^="barang_qty[]"]');
      $inputs.each(function (index) { total += parseFloat($(this).val()) * parseFloat($(this).attr('data-price'));
        (function (total) {
            $("#barang_total[]").val(total); 
        })(total);
     });  
     $('#total').val(total); 
}); 

您错过了名称为barang_total[]的输入id。

试试这个,(我在jsbin中测试过,它很有效)

<td class="price">
  <input type="text" name="barang_unit_price[]" readonly id="barang_unit_price[]" class="form-control" value="100">
  </td>
  <td>
    <input type="text" name="barang_qty[]" data-price="100" id="barang_qty[]" onkeyup="getTotal()" class="form-control" value="2">
  </td>
  <td>
    <input type="text" name="barang_total[]" id="barang_total[]" class="sum form-control" >
  </td>

JS-

function getTotal() { 
  $(':input[id^="barang_qty[]"]').keyup(function() {
  var total = 0;
  var $inputs = $(':input[id^="barang_qty[]"]');
  $inputs.each(function (index) {
    total += parseFloat($(this).val()) *  parseFloat($(this).attr('data-price'));
    $(':input[id^="barang_total[]"]').val(total); //edited this line
  });  
  $('#total').val(total); 
  }); 
}

演示:http://jsbin.com/kijifisinu/edit?html,js,输出