Reputation: 25
I wanna set a name for each fildset added dynamicaly, the name is taken from a select tag. for example, I chose a product from the select list, the name is captured as the legend of the fieldset .. then I press the add button to add another fieldset, and when I chose a new name from the select list, the same name remain for all of the fieldsets.
here's my code
HTML :
$("select[name='brand']").change(function () {
var selectedText = $(this).find("option:selected").text();
$(".test").text(selectedText);
});
$(function()
{
$(document).on('click', '.btn-add', function(e)
{
e.preventDefault();
var controlForm = $('.controls:first'),
currentEntry = $(this).parents('.entry:first'),
newEntry = $(currentEntry.clone()).appendTo(controlForm);
newEntry.find('input').val('');
controlForm.find('.entry:not(:last) .btn-add')
.removeClass('btn-add').addClass('btn-remove')
.removeClass('btn-success').addClass('btn-danger')
.html('<span class="glyphicon glyphicon-minus"></span>');
}).on('click', '.btn-remove', function(e)
{
$(this).parents('.entry:first').remove();
e.preventDefault();
return false;
});
});
@import url('http://getbootstrap.com/3.3.7/assets/css/bootstrap.css')
.container {
margin-top: 10px;
}
.nav-tabs > li {
position: relative;
}
.nav-tabs > li > a {
display: inline-block;
}
.nav-tabs > li > span {
display: none;
cursor: pointer;
position: absolute;
right: 6px;
top: 8px;
color: red;
}
.nav-tabs > li:hover > span {
display: inline-block;
}
fieldset {
border: 1px solid #ddd !important;
margin: 0;
xmin-width: 0;
padding: 10px;
position: relative;
border-radius: 4px;
background-color: #f5f5f5;
padding-left: 10px!important;
}
legend {
font-size: 14px;
font-weight: bold;
margin-bottom: 0px;
width: 35%;
border: 1px solid #ddd;
border-radius: 4px;
padding: 5px 5px 5px 10px;
background-color: #ffffff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<div class="controls">
<div class="entry">
<div class="form-group">
<select id="brand" name="brand" class="selectpicker" data-width="100%" data-none-selected-text="Nothing selected" data-live-search="true" tabindex="-98">
<option value=""></option>
<option value="1">Alcatel</option>
<option value="2">Samsung</option>
<option value="3">Nokia</option>
<option value="4">Apple</option>
<option value="5">LG</option>
<option value="6">Sony</option>
<option value="7">Huawei</option>
<option value="8">Oppo</option>
<option value="9">WIKO</option>
<option value="10">ACCENT</option>
</select>
<span class="input-group-btn">
<button class="btn btn-success btn-add" type="button">
<span class="glyphicon glyphicon-plus"></span>
</button>
</span>
</div>
<div class="form-group">
<fieldset class="">
<legend class="test"></legend>
<ul class="nav nav-tabs" role="tablist">
<li class="active"><a href="#contact_01" data-toggle="tab">Samsung A3</a><span>x</span>
</li>
<li><a href="#contact_02" data-toggle="tab">Samsung A4</a> <span> x </span>
</li>
<li><a href="#" class="add-contact">+ Add product</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="contact_01">Contact Form: Joe Smith</div>
<div class="tab-pane" id="contact_02">Contact Form: Molly Lewis</div>
</div>
</fieldset>
</div>
</div>
</div>
https://jsfiddle.net/aymanP/s5bud321/
Upvotes: 0
Views: 56
Reputation: 4007
As you are adding dynamically element. Your event handler for select is not going to work.because it is "direct" binding which will only attach the handler to elements that already exist. It won't get bound to elements created in the future. To do that, you'll have to create a "delegated" binding by using on().
As you used .test
class $(".test").text(selectedText);
this statement will change text to all .test
class. So need to find that class in current fieldset. Using parents()
we can do that.
$('.controls').on('change', "select[name='brand']", function() {
var selectedText = $(this).find("option:selected").text();
$(this).parents('.entry').find(".test").text(selectedText);
});
$(function() {
$(document).on('click', '.btn-add', function(e) {
e.preventDefault();
var controlForm = $('.controls:first'),
currentEntry = $(this).parents('.entry:first'),
newEntry = $(currentEntry.clone()).appendTo(controlForm);
newEntry.find('input').val('');
controlForm.find('.entry:not(:last) .btn-add')
.removeClass('btn-add').addClass('btn-remove')
.removeClass('btn-success').addClass('btn-danger')
.html('<span class="glyphicon glyphicon-minus"></span>');
}).on('click', '.btn-remove', function(e) {
$(this).parents('.entry:first').remove();
e.preventDefault();
return false;
});
});
@import url('http://getbootstrap.com/3.3.7/assets/css/bootstrap.css') .container {
margin-top: 10px;
}
.nav-tabs>li {
position: relative;
}
.nav-tabs>li>a {
display: inline-block;
}
.nav-tabs>li>span {
display: none;
cursor: pointer;
position: absolute;
right: 6px;
top: 8px;
color: red;
}
.nav-tabs>li:hover>span {
display: inline-block;
}
fieldset {
border: 1px solid #ddd !important;
margin: 0;
xmin-width: 0;
padding: 10px;
position: relative;
border-radius: 4px;
background-color: #f5f5f5;
padding-left: 10px!important;
}
legend {
font-size: 14px;
font-weight: bold;
margin-bottom: 0px;
width: 35%;
border: 1px solid #ddd;
border-radius: 4px;
padding: 5px 5px 5px 10px;
background-color: #ffffff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<div class="controls">
<div class="entry">
<div class="form-group">
<select id="brand" name="brand" class="selectpicker" data-width="100%" data-none-selected-text="Nothing selected" data-live-search="true" tabindex="-98">
<option value=""></option>
<option value="1">Alcatel</option>
<option value="2">Samsung</option>
<option value="3">Nokia</option>
<option value="4">Apple</option>
<option value="5">LG</option>
<option value="6">Sony</option>
<option value="7">Huawei</option>
<option value="8">Oppo</option>
<option value="9">WIKO</option>
<option value="10">ACCENT</option>
</select>
<span class="input-group-btn">
<button class="btn btn-success btn-add" type="button">
<span class="glyphicon glyphicon-plus"></span>
</button>
</span>
</div>
<div class="form-group">
<fieldset class="">
<legend class="test"></legend>
<ul class="nav nav-tabs" role="tablist">
<li class="active"><a href="#contact_01" data-toggle="tab">Samsung A3</a><span>x</span>
</li>
<li><a href="#contact_02" data-toggle="tab">Samsung A4</a> <span> x </span>
</li>
<li><a href="#" class="add-contact">+ Add product</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="contact_01">Contact Form: Joe Smith</div>
<div class="tab-pane" id="contact_02">Contact Form: Molly Lewis</div>
</div>
</fieldset>
</div>
</div>
</div>
Upvotes: 1