[英]How to sum the values from dynamically created input fields
I have created Dynamic Add / Remove fields. 我创建了动态添加/删除字段。 Everything is working perfectly. 一切工作正常。 I want sum of values from Amount field to be displayed on real time basis using JavaScript. 我希望使用JavaScript实时显示“ 金额”字段中的值之和。 I have tried but am unable to do. 我已经尝试过,但是做不到。 I am not much familiar with JavaScript. 我对JavaScript不太熟悉。
Following is code: 以下是代码:
var i = 0; jQuery(document).ready(function($) { //fadeout selected item and remove $(document).on('click', '#remove-allocation-fields', function(event) { event.preventDefault(); $(this).parent().fadeOut(300, function() { $(this).parent().empty(); return false; }); }); var rows = '<div class="all-allocation-fields"><div class="row"><div class="col-5"><div class="form-group"><input type="text" class="form-control" name="allocate_items[]"></div></div><div class="col-5"><div class="form-group"><input type="text" class="form-control code" id="code" name="allocate_amount[]"></div></div><div class="col-2"><button type="button" class="btn btn-danger" id="remove-allocation-fields">Remove</button></div></div></div>'; //add input $('#add-allocation-fields').click(function() { $(rows).fadeIn("slow").appendTo('#fund-allocation-fields'); i++; return false; }); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="card"> <div class="card-header text-center"> <b>Allocation of Funds</b> </div> <div class="card-body"> <div class="row"> <div class="col-5"><label><b>Allocation Items</b> <b style="color:#FF0000;">*</b></label></div> <div class="col-5"><label><b>Amount</b> <b style="color:#FF0000;">*</b></label></div> <div class="col-2"></div> </div> <div class="row"> <div class="col-5"> <div class="form-group"> <input type="text" class="form-control" name="allocate_items[]"> </div> </div> <div class="col-5"> <div class="form-group"> <input type="text" class="form-control code" id="code" name="allocate_amount[]"> </div> </div> <div class="col-2"> <button type="button" class="btn btn-success" id="add-allocation-fields">Add</button> </div> </div> <div id="fund-allocation-fields"> </div> <small class="form-text text-muted"><i>Total amount must be equal to the goal amount.</i></small> <div id="sum"></div> </div> </div>
You can use add keyup
event listener and calculate sum as: 您可以使用添加keyup
事件侦听器并将总和计算为:
function calculateSum() { //Add a calculateSum function
var sum = 0;
$("input[name='allocate_amount[]']").each(function() {
sum += +this.value || 0;
});
$("#sum").text(sum);
}
//fadeout selected item and remove
$(document).on('click', '#remove-allocation-fields', function(event) {
event.preventDefault();
$(this).parent().fadeOut(300, function() {
$(this).parent().empty();
calculateSum(); //Call calculateSum to update the sum valaue
return false;
});
});
$("body").on("keyup", "input[name='allocate_amount[]']", calculateSum); //update when keyup
Demo: 演示:
var i = 0; jQuery(document).ready(function($) { function calculateSum() { var sum = 0; $("input[name='allocate_amount[]']").each(function() { sum += +this.value || 0; }); $("#sum").text(sum); } //fadeout selected item and remove $(document).on('click', '#remove-allocation-fields', function(event) { event.preventDefault(); $(this).parent().fadeOut(300, function() { $(this).parent().empty(); calculateSum(); return false; }); }); var rows = '<div class="all-allocation-fields"><div class="row"><div class="col-5"><div class="form-group"><input type="text" class="form-control" name="allocate_items[]"></div></div><div class="col-5"><div class="form-group"><input type="text" class="form-control code" id="code" name="allocate_amount[]"></div></div><div class="col-2"><button type="button" class="btn btn-danger" id="remove-allocation-fields">Remove</button></div></div></div>'; //add input $('#add-allocation-fields').click(function() { $(rows).fadeIn("slow").appendTo('#fund-allocation-fields'); i++; return false; }); $("body").on("keyup", "input[name='allocate_amount[]']", calculateSum); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="card"> <div class="card-header text-center"> <b>Allocation of Funds</b> </div> <div class="card-body"> <div class="row"> <div class="col-5"><label><b>Allocation Items</b> <b style="color:#FF0000;">*</b></label></div> <div class="col-5"><label><b>Amount</b> <b style="color:#FF0000;">*</b></label></div> <div class="col-2"></div> </div> <div class="row"> <div class="col-5"> <div class="form-group"> <input type="text" class="form-control" name="allocate_items[]"> </div> </div> <div class="col-5"> <div class="form-group"> <input type="text" class="form-control code" id="code" name="allocate_amount[]"> </div> </div> <div class="col-2"> <button type="button" class="btn btn-success" id="add-allocation-fields">Add</button> </div> </div> <div id="fund-allocation-fields"> </div> <small class="form-text text-muted"><i>Total amount must be equal to the goal amount.</i></small> <div id="sum"></div> </div> </div>
I think you can do it with this code: 我认为您可以使用以下代码来做到这一点:
function calcAmount(){
var amount = 0;
$('input[name="allocate_amount[]"]').each(function(){
amount = amount + $(this).val();
});
return amount;
}
jQuery(document).ready(function($) {
$("input[name="allocate_amount[]]").blur(function(){
$("#sum").html(calcAmount());
});
});
Okay, I try to update your code: and it works fine: 好的,我尝试更新您的代码:并可以正常工作:
main changes: - assign ids to input fields - make changes in function 主要更改:-为输入字段分配ID-更改功能
have a look to jsfiddle 看看jsfiddle
https://jsfiddle.net/dupinderdhiman/ygvphmxq/31/ https://jsfiddle.net/dupinderdhiman/ygvphmxq/31/
Main changes: 主要变化:
var sum = eval($('#value1').val()) + eval($('#value2').val());
$('#sum').text(sum);
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("p").click(function(){
$(this).hide();
});
});
</script>
</head>
<body>
<div class="card">
<div class="card-header text-center">
<b>Allocation of Funds</b>
</div>
<div class="card-body">
<div class="row">
<div class="col-5"><label><b>Allocation Items</b> <b style="color:#FF0000;">*</b></label></div>
<div class="col-5"><label><b>Amount</b> <b style="color:#FF0000;">*</b></label></div>
<div class="col-2"></div>
</div>
<div class="row">
<div class="col-5">
<div class="form-group">
<input type="text" class="form-control" id='value1' name="allocate_items[]">
</div>
</div>
<div class="col-5">
<div class="form-group">
<input type="text" class="form-control code" id='value2' name="allocate_amount[]">
</div>
</div>
<div class="col-2">
<button type="button" class="btn btn-success" id="add-allocation-fields">Add</button>
</div>
</div>
<div id="fund-allocation-fields">
</div>
<small class="form-text text-muted"><i>Total amount must be equal to the goal amount. <span id="sum"></span></i></small>
</div>
</div>
<script type="text/javascript">
var i = 0;
jQuery(document).ready(function($) {
//fadeout selected item and remove
$(document).on('click', '#remove-allocation-fields', function(event) {
event.preventDefault();
$(this).parent().fadeOut(300, function() {
$(this).parent().empty();
return false;
});
});
var rows = '<div class="all-allocation-fields"><div class="row"><div class="col-5"><div class="form-group"><input type="text" class="form-control" name="allocate_items[]"></div></div><div class="col-5"><div class="form-group"><input type="text" class="form-control code" id="code" name="allocate_amount[]"></div></div><div class="col-2"><button type="button" class="btn btn-danger" id="remove-allocation-fields">Remove</button></div></div></div>';
//add input
$('#add-allocation-fields').click(function() {
debugger;
$(rows).fadeIn("slow").appendTo('#fund-allocation-fields');
i++;
var sum = eval($('#value1').val()) + eval($('#value2').val());
$('#sum').text(sum);
return false;
});
});
</script>
</body>
</html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.