[英]How do I dynamically sum input values inside a repeatable fields?
我如何才能获得动态创建的每个字段值的总计
<div class="rf-row count-container">
<input class="total">
<div class="row">
<input class="add-monthly">
</div>
<div class="row">
<input class="add-monthly">
</div>
<div class="row">
<input class="add-monthly">
</div>
</div>
由于已经标记了jquery
,因此以下是您遍历add-monthly
类的所有input
add-monthly
它们的值求和的方法,最终返回总和值:
function sumFields() {
var totalSum = 0;
$("input.add-monthly").each(function () {
totalSum += $(this).val();
});
return totalSum;
}
请检查此代码,这可能会有所帮助
<!DOCTYPE html>
<html>
<head>
Demo
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div class="rf-row count-container">
<input class="total">
<div class="row">
<input class="add-monthly" value="5">
</div>
<div class="row">
<input class="add-monthly" value="5">
</div>
<div class="row">
<input class="add-monthly" value="5">
</div>
</div>
<script>
$(document).ready(function(){
var value = 0;
$('.count-container .row').each(function(){
value += parseInt($(this).find('.add-monthly').val()) ? parseInt($(this).find('.add-monthly').val()) : 0
})
$('.total').val(value);
});
</script>
</body>
</html>
var classes = document.getElementsByClassName('add-monthly') classes = [...classes] var result = classes .map(item => +item.value) .reduce((a, b) => a + b, 0); document.getElementsByClassName('sum-monthly')[0].value = result console.log('summ', result)
<div class="rf-row count-container"> SUM: <input class="sum-monthly"/><br/> <div class="sub-rf-row"> <input class="add-monthly" type="number" value="1"> </div> <div class="sub-rf-row"> <input class="add-monthly" type="number" value="4"> </div> <div class="sub-rf-row template"> <input class="add-monthly" type="number" value="0"> </div> </div>
如果要动态添加input
字段,建议将更改功能委派给父.count-container
。 触发事件后,我将遍历.add-monthly
字段以总结其值。 为了帮助JavaScript
理解这些值是浮点数(因为我假设我们正在处理货币),所以我使用parseFloat()来确保可以将值添加到总和中。 最后,我将.sum-monthly
的值设置为使用toFixed()以定点表示法格式化数字(同样,我假设我们正在处理货币)。
$(document).ready(function() { $('.count-container').on('change', '.add-monthly', function() { let total = 0; $('.add-monthly').each(function() { total += parseFloat($(this).val()) || 0; }); $('.sum-monthly').val(total.toFixed(2)); }).find('.add-monthly').change(); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="rf-row count-container"> <input class="sum-monthly" readonly> <div class="sub-rf-row"> <input class="add-monthly"> </div> <div class="sub-rf-row"> <input class="add-monthly"> </div> <div class="sub-rf-row template"> <input class="add-monthly"> </div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.