【问题标题】:How to display the total number of quantity in the input box如何在输入框中显示数量的总数
【发布时间】:2019-01-25 15:47:19
【问题描述】:

我有一个数量字段。用户可以单击添加按钮添加多个数量字段。

我的问题是,我必须在输入框中显示数量的总数。例如我在数量框中添加了 10 个数量,总数为 10 个。

用户可以通过点击加减按钮来增加和减少数量,也可以直接在数量框中输入数量,然后总数会显示在总计框中。

用户可以添加多个数量字段,与删除相同。我点击删除数量应该从总量字段中删除。

你也可以在这里查看我的代码https://jsfiddle.net/pu6qy4zr/70/

function increaseValue(n) {
  var value = parseInt(document.getElementById('number' + n).value, 10);
  value = isNaN(value) ? 0 : value;
  value++;
  document.getElementById('number' + n).value = value;

}

function decreaseValue(n) {
  var value = parseInt(document.getElementById('number' + n).value, 10);
  value = isNaN(value) ? 0 : value;
  value < 1 ? value = 1 : '';
  value--;
  document.getElementById('number' + n).value = value;
}

$(document).ready(function() {
  var max_fields = 20; //maximum input boxes allowed
  var wrapper = $(".add_row"); //Fields wrapper
  var add_button = $(".add_row_click"); //Add button ID

  var x = 1; //initlal text box count
  $(add_button).click(function(e) { //on add input button click
    e.preventDefault();
    if (x < max_fields) { //max input box allowed
      x++; //text box increment
      $("input[id^=medication_name]").focus();
      $(wrapper).append('<div class="custom_fields"><div class="col-md-6"><div class="row"><div class="col-md-6"><div class="form_group"><div class="plus_minus"><span class="value_button decrease" onclick="decreaseValue(' + x + ')" value="Decrease Value"> - </span><input type="number" id="number' + x + '" class="qty_number form_control" name="qty_number[]" class="form_control" value="0" /><span class="value_button increase" onclick="increaseValue(' + x + ')" value="Increase Value"> + </span></div></div></div><div class="col-md-6"><div class="form_group"> <div class="btn_row remove_field"> <span> - </span> Remove  </div></div></div></div></div></div></div>');
    }
  });

  $(wrapper).on("click", ".remove_field", function(e) { //user click on remove text
    e.preventDefault();
    $(this).closest('.custom_fields').remove();
    x--;
  })


});
<div class="add_row">
  <div class="plus_minus">
    <span class="value_button decrease" onclick="decreaseValue(1)" value="Decrease Value">-</span>
    <input type="number" id="number1" class="qty_number form_control" name="qty_number[]" value="0" class="form_control" />
    <span class="value_button increase" onclick="increaseValue(1)" value="Increase Value">+</span>

  </div>
  <div class="btn_row add_row_click"> <span> +  </span> Add </div>
</div>
<input type="text" class="form_control" name="total_qty" id="total_qty" value="" placeholder="Total number of quantity" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

【问题讨论】:

  • @vsync 读取问题的标题

标签: javascript jquery html css


【解决方案1】:

你可以简化这一切。

  • 对每个更改运行 sum(),包括删除和直接输入/粘贴。
  • 只有一个加号/减号事件处理程序
  • 删除内联处理程序

PS:我发现了一个错误:value &lt; 1 ? value = 1 : ''; 将强制值为 1
PPS:我建议您使用 .clone 作为 div 而不是插入它。使更新 HTML 变得更加容易。由于我委托并使用相对寻址,因此您无需更改字段的 ID

function sum() {
  var total = 0;
  $(".qty_number").each(function() { // or use .map.get()
    total += this.value?parseInt(this.value):0;
  })
  $("#total_qty").val(total);
}


$(document).ready(function() {
  var max_fields = 20; //maximum input boxes allowed
  var $wrapper = $(".add_row"); //Fields wrapper
  var add_button = $(".add_row_click"); //Add button ID

  var x = 1; //initlal text box count
  $(add_button).on("click",function(e) { //on add input button click
    e.preventDefault();
    if (x < max_fields) { //max input box allowed
      x++; //text box increment
      $("input[id^=medication_name]").focus();
      $wrapper.append('<div class="custom_fields"><div class="col-md-6"><div class="row"><div class="col-md-6"><div class="form_group"><div class="plus_minus"><span class="value_button decrease" value="Decrease Value"> - </span><input type="number" id="number' + x + '" class="qty_number form_control" name="qty_number[]" class="form_control" value="0" /><span class="value_button increase" value="Increase Value"> + </span></div></div></div><div class="col-md-6"><div class="form_group"> <div class="btn_row remove_field"> <span> - </span> Remove  </div></div></div></div></div></div></div>');
    }
  });

  $wrapper.on("click", ".remove_field", function(e) { //user click on remove text
    e.preventDefault();
    $(this).closest('.custom_fields').remove();
    x--;
    sum(); // remove also updates the total
  })
  $wrapper.on("click",".value_button",function() {
    var $input = $(this).closest(".plus_minus").find(".qty_number");
    var value = parseInt($input.val(), 10);
    value = isNaN(value) ? 0 : value;
    value+=$(this).is(".decrease")?-1:1; // decrease on increase dependent on class
    if (value < 0) value=0;
    $input.val(value);
    sum(); // sum each time
  });
  $wrapper.on("input",".qty_number",sum); // any input or paste
});
<div class="add_row">
  <div class="plus_minus">
    <span class="value_button decrease" value="Decrease Value">-</span>
    <input type="number" id="number1" class="qty_number form_control" name="qty_number[]" value="0" class="form_control" />
    <span class="value_button increase" value="Increase Value">+</span>

  </div>
  <div class="btn_row add_row_click"> <span> +  </span> Add </div>
</div>
<input type="text" class="form_control" name="total_qty" id="total_qty" value="" placeholder="Total number of quantity" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

【讨论】:

  • 感谢您的回复,给我一些时间在我的代码中实现。
  • 请注意我刚刚更新了处理删除的代码
  • 另外我建议你使用 .clone 作为 div 而不是插入它。使更新 HTML 变得更加容易。由于我委托并使用相对寻址,因此您无需更改字段的 ID
  • 我正在检查您的代码以便理解。另外,我注意到您删除了增加和减少功能。
  • 是的,它们不再需要。此外,我刚刚添加了$(".plus_minus").on("input",".qty_number",sum);,因为这些字段不是只读的,因此用户可以在不使用 +/- 的情况下键入数字
猜你喜欢
  • 1970-01-01
  • 2021-10-06
  • 2017-09-19
  • 2021-09-30
  • 2017-11-16
  • 1970-01-01
  • 2022-01-10
  • 2019-07-29
  • 1970-01-01
相关资源
最近更新 更多