The script in this post, allows you to create a repeated section where “add” link adds a new section identical to the current one below, while the “remove” link will remove the current section.
function makeRepeater(sectionsSelector, addClass, removeClass, AYSMsg){
(function($){
$(
sectionsSelector + " " + addClass +","+
sectionsSelector + " " + removeClass
).on("click", function(event){
// Avoiding the link to do the default behavior.
event.preventDefault();
// Get the container to be removed/cloned
var theContainer = $(this).parents(sectionsSelector);
if($(this).is(addClass)){
// Cloning the container with events
var clonedSection = $(theContainer).clone(true);
// And appending it just after the current container
$(clonedSection).insertAfter(theContainer);
}else{
// If the user confirm the "Are You Sure" message
// we can remove the current container
if(confirm(AYSMsg)){
// Making fade out, hide and remove element a sequence
// to provide a nice UX when removing element.
$(theContainer).fadeOut('normal',
function( ){
$(this).hide('fast',
function(){ $(this).remove(); }
);
}
);
}
}
});
})(jQuery);
}
This simple method can be used in a really simple way:
makeRepeater(
'.my-repeated-section', /* The container selector */
'.add', /* The add action selector */
'.remove', /* The remove action selector */
'Are you sure you want to remove this section?' /* The AYS message. */
);
This would be the HTML:
<div class="group-of-repeated-sections">
<div class="my-repeated-section">
<input type="text" value="My repeated section" />
<span>
<a href="#" class="add"> + </a>
<a href="#" class="remove"> - </a>
</span>
</div>
</div>
Update: I’have prepared a live example on jsFiddle