I have a form in which I need to add new inputs based on user interaction. When the page loads, the form looks like this:
<li class="basic">
<h4 class="secondary-title" style="margin-top: 0px;">Specifications</h4>
<span style="float: right; margin-top: -40px;"><a href="#" class="add_specification_group"><i class="fa fa-plus-circle"></i> Add group</a></span>
</li>
<li id="specifications">
<div class="specification_group" style="margin-bottom: 20px;">
<div class="label">
Specification group
</div>
<input name="specification_group_title1[]" type="text" class="short" placeholder="Group title" value="">
<a href="#" class="add_specification_group_field"><i class="fa fa-plus-circle"></i> Add field</a><br />
<input name="specification_name1[]" type="text" class="short" placeholder="Name">
<input name="specification_value1[]" type="text" class="short" placeholder="Value">
</div>
</li>
I user can either click on the "Add group" link in order to add a new group, or on the "Add field" link to add fields to one of the existing groups.
The HTML for the group or fields is taken from a template.
<script type="text/template" id="specification_group_template">
<div class="specification_group" style="margin-bottom: 15px;">
<div class="label">
Specification group
</div>
<input name="specification_group_title[]" type="text" class="short" placeholder="Group title" value="">
<a href="#" class="add_specification_group_field"><i class="fa fa-plus-circle"></i> Add field</a><br />
<input name="specification_name[]" type="text" class="short" placeholder="Name">
<input name="specification_value[]" type="text" class="short" placeholder="Value">
</div>
</script>
<script type="text/template" id="specification_group_field_template">
<div class="specification_group">
<input name="specification_name[]" type="text" class="short" placeholder="Name">
<input name="specification_value[]" type="text" class="short" placeholder="Value">
</div>
</script>
<script type="text/javascript">
(function($) {
$(function() {
var groupCount = 1;
$('.add_specification_group').on('click', function(e) {
e.preventDefault();
$('#specifications').append($('#specification_group_template').html());
groupCount++;
});
$('#specifications').on('click', '.add_specification_group_field', function(e) {
e.preventDefault();
$(this).parents('div.specification_group').append($('#specification_group_field_template').html()).find('input:last');
});
});
})(jQuery)
</script>
Everything is fine right now, but I would like to modify this code so whenever I add a new group, the input names should be modified based on the groupCount variable value.
So if the user clicks "Add group", the appended HTML should be:
<div class="specification_group" style="margin-bottom: 20px;">
<div class="label">
Specification group
</div>
<input name="specification_group_title2[]" type="text" class="short" placeholder="Group title" value="">
<a href="#" class="add_specification_group_field"><i class="fa fa-plus-circle"></i> Add field</a><br />
<input name="specification_name2[]" type="text" class="short" placeholder="Name">
<input name="specification_value2[]" type="text" class="short" placeholder="Value">
</div>
Also, when a user decides to add new fields to an existing group, the inputs should be renamed and the group index value should be added.