Reputation: 1040
I have a form which i want to clone. The form looks like this.
<form method="post">
<div id=duplicator>
<div class="form-group col-md-6">
<label>Client's Name</label>
<input type="text" class="form-control" name="client_name" />
</div>
<div class="col-md-12">
<div class="pull-left">
<button type="button" class="btn btn-success add" onclick="duplicate()">ADD +</button>
<button type="button" class="btn btn-danger remove">DEL -</button>
</div>
</div>
</div>
//Duplicator div close
<div class="pull-right">
<input type="submit" class="btn btn-success btn-xm submit" name="submit" value="Submit" />
</div>
</form>
I duplicated the Division using following code:
var i = 0;
var original = document.getElementById('duplicator');
function duplicate() {
var clone = original.cloneNode(true);
clone.id = "duplicat0r" + ++i;
original.parentNode.appendChild(clone);
}
But the divisions are cloning after the submit button. I want to insert the cloned div before the submit button.
and how to remove the cloned division on clicking delete button.
Upvotes: 0
Views: 2351
Reputation: 21489
Use clone()
to copy element and use before()
to insert element before selector.
$(".add").click(function(){
var clone = $(".form-group:first").clone();
clone.find("input").val("");
$(".buttonBox").before(clone);
});
$(".remove").click(function(){
$(".form-group:last").remove();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id=duplicator>
<div class="form-group col-md-6">
<label>Client's Name</label>
<input type="text" class="form-control" name="client_name" />
</div>
<div class="col-md-12 buttonBox">
<div class="pull-left">
<button type="button" class="btn btn-success add">ADD +</button>
<button type="button" class="btn btn-danger remove">DEL -</button>
</div>
</div>
</div>
<div class="pull-right">
<input type="submit" />
</div>
Upvotes: 2
Reputation: 43930
This demo will:
Initially have a text input, add button, and submit button.
Click add button to add a group of cloned form elements.
This clone is appended to the form.
Each clone has a delete button.
Click the delete button to remove the clone.
There will always be at least one form-group.
var i = 0;
var original = document.getElementById('set');
var form1 = document.getElementById('form1');
var btn1 = form1.querySelector('button');
function duplicate() {
i++;
var clone1 = original.cloneNode(true);
clone1.id = "clone" + i;
form1.appendChild(clone1);
btn1.id = "btn" + i;
}
function delDupe() {
var clone1 = document.getElementById('clone' + i);
if (!clone1) {
return false;
}
form1.removeChild(clone1);
i--;
}
body {
position: relative;
overflow: hidden;
width: 100%;
height: 100%;
}
section {
position: absolute;
overflow: auto;
width: 100vw;
height: 100vh;
}
form {
margin-bottom: 30px;
}
label {
margin-top: 30px;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<section>
<form id="form1" name="form1" method="post">
<fieldset id='set' class="set">
<div class="form-group col-md-6">
<label>Client's Name</label>
<input type="text" class="form-control" name="client_name" />
</div>
<div class="col-md-12 pull-left">
<button class="btn btn-danger remove" onclick="delDupe()">DEL -</button>
</div>
</fieldset>
</form>
<div class="col-md-12 pull-left">
<button type="button" class="btn btn-success add" onclick="duplicate()">ADD +</button>
</div>
<div class="pull-right">
<input type="submit" class="btn btn-success btn-xm submit" name="submit" value="Submit" form="form1" />
</div>
</section>
Upvotes: 1
Reputation: 8795
Try this,
$(document).ready(function(){
$("form").on('click','.add',function(){
var addd = $(".col-md-6").first().clone();
$(".col-md-12").before(addd);
});
$("form").on('click','.remove',function(e){
var subb = $(".col-md-6").last().remove();
});
});
Upvotes: 0
Reputation: 5175
Try this:
$(document).ready(function() {
var last12 = $('.col-md-12').last();
$(document).on('click', '.add', function() {
$('.col-md-6').last().clone().insertBefore(last12);
});
$(document).on('click', '.remove', function() {
if($('.col-md-6').length > 1) {
$('.col-md-6').last().remove();
}
});
});
Here is a JSFiddle
https://jsfiddle.net/noz2s4nh/6/
Upvotes: 1