【问题标题】:Automatically calculate the sum of input values with javascript用javascript自动计算输入值的总和
【发布时间】:2020-01-17 15:56:57
【问题描述】:

在计算用户输入的数字的总和并自动显示时,我需要一些帮助。当用户删除一个数字时,总和也应该自动计算。

$('.col-lg-1').change(function() {
  var total = 0;
  $('.col-lg-1').each(function() {
    if ($(this).val() != '') {
      total += parseInt($(this).val());
    }
  });
  $('#result').html(total);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-lg-1">
  <label>TEST 1 </label>

  <input type="hidden" name="section_id" value="<?php echo $section_id; ?>">
  <input type="hidden" name="session_id" value="<?php echo $session_id; ?>">
  <input type="hidden" name="student_id" value="<?php echo $student_id; ?>">
  <input type="hidden" name="class_id" value="<?php echo $class_id; ?>">
  <input type="number" name="mt_ca1" class="form-control input-sm rounded-0" required>
</div>
<div class="col-lg-1" id="t2">
  <label>TEST 2</label>
  <input type="number" name="mt_ca2" class="form-control input-sm rounded-0" required>
</div>
<div class="col-lg-1" id="assg">
  <label>TEST 3</label>
  <input type="number" name="mt_ca3" class="form-control input-sm rounded-0" required>
</div>
<div class="col-lg-1">
  <label>TOTAL</label>
  <output id="result"></output>
</div>

【问题讨论】:

  • .col-lg-1 是一个 DIV - 您正在附加一个更改事件并尝试从 DIV 中获取 this.value...
  • 更改输入中的某些内容实际上会触发父 div 中的更改事件,因为它会冒泡。不起作用的是$(this).val(),因为 div 没有价值。

标签: javascript function codeigniter input


【解决方案1】:

差不多了。您的目标是 '.col-lg-1',它们是 div,而不是输入。您需要以输入为目标才能读取它们的值。

const $inputs = $('input[type="number"]')

$inputs.change(function() {
  var total = 0;
  $inputs.each(function() {
    if ($(this).val() != '') {
      total += parseInt($(this).val());
    }
  });
  $('#result').html(total);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-lg-1">
  <label>TEST 1 </label>

  <input type="hidden" name="section_id" value="<?php echo $section_id; ?>">
  <input type="hidden" name="session_id" value="<?php echo $session_id; ?>">
  <input type="hidden" name="student_id" value="<?php echo $student_id; ?>">
  <input type="hidden" name="class_id" value="<?php echo $class_id; ?>">
  <input type="number" name="mt_ca1" class="form-control input-sm rounded-0" required>
</div>
<div class="col-lg-1" id="t2">
  <label>TEST 2</label>
  <input type="number" name="mt_ca2" class="form-control input-sm rounded-0" required>
</div>
<div class="col-lg-1" id="assg">
  <label>TEST 3</label>
  <input type="number" name="mt_ca3" class="form-control input-sm rounded-0" required>
</div>
<div class="col-lg-1">
  <label>TOTAL</label>
  <output id="result"></output>
</div>

【讨论】:

    【解决方案2】:

    .col-lg-1 是一个 DIV - 您正在附加一个更改事件并试图从一个不起作用的 DIV 中获取 this.value

    相反,将您的输入和(在"input" 事件上).reduce() 它们的值缓存到一个整数中:

    jQuery($ => {
    
      const $inp = $(".input-sm"); //PS: Use a more specific selector than this one
      const $res = $("#result");
    
      $inp.on("input", () => {
        const total = $inp.get().reduce((acc, el) => (acc += parseInt(el.value, 10) || 0), 0);
        $res.text(total);
      });
      
    });
    <div>
    <label>TEST 1 </label>
    <input type="number" name="mt_ca1" class="inp form-control input-sm rounded-0" required value="0">
    </div>
    <div class="col-lg-1" id="t2">
      <label>TEST 2</label>
      <input type="number" name="mt_ca2" class="form-control input-sm rounded-0" required value="0">
    </div>
    <div class="col-lg-1" id="assg">
      <label>TEST 3</label>
      <input type="number" name="mt_ca3" class="form-control input-sm rounded-0" required value="0">
    </div>
    <div class="col-lg-1">
      <label>TOTAL</label>
      <output id="result"></output>
    </div>
    
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    【讨论】:

      【解决方案3】:

      您的每个元素都是数字类型,并且具有相同的类“form-control”、“input-sm”和“rounded-0”。 所以要么

      $('input[type=number]').change(function() {
        var total = 0;
        $('input[type=number]').each(function() {
          if ($(this).val() != '') {
            total += parseInt($(this).val());
          }
        });
        $('#result').html(total);
      });
      

      $('.rounded-0').change(function() {
        var total = 0;
        $('.rounded-0').each(function() {
          if ($(this).val() != '') {
            total += parseInt($(this).val());
          }
        });
        $('#result').html(total);
      });
      

      可以使用。

      【讨论】:

      • 这个拒绝投票的答案有什么问题?? :(@MissJargo
      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 2019-02-04
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 2019-11-10
      相关资源
      最近更新 更多