我有一个bootstrap
导航标签,我想用jQuery动态添加标签。当我点击一个按钮时,bootstrap modal
显示我可以选择的位置。在我选择一个ajax
调用后,获取所选选项的id
,它会搜索完整的选项对象,然后将对象返回为json
。然后添加一个新选项卡,其中包含选项的名称。一切都很好,但是如果我再次单击“添加选项”,它会返回2个选项卡...如果我再添加一个...返回3个选项卡,依此类推!
继承我的代码:
HTML:
<div id="select_opt" class="modal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close_op" data-dismiss="modal">×</button>
<h4 class="modal-title">{{ __('Choose option') }}</h4>
</div>
<div class="modal-body">
<select name="op" id="op">
@if (count($language->optionDescriptions))
@foreach ($language->optionDescriptions as $optionDescription)
<option value="{{ $optionDescription->option->id }}">{{ $optionDescription->name }}</option>
@endforeach
@endif
</select>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" id="select_new_opt" data-dismiss="modal">Select</button>
</div>
</div>
</div>
JS:
$('#add_opt').click(function () {
$('#select_opt').css('display', 'block');
$('.close_op').click( function () {
$('#select_opt').css('display', 'none');
});
$('#select_new_opt').click(function () {
var option_id = $('#op option:selected').val();
$.ajax({
dataType: 'json',
type: 'POST',
url: '{{ URL::to('options/getOption') }}',
data: { id : option_id, _token : $('input[name="_token"]').val() },
success: function (data) {
$('.nav.nav-tabs #add_option').before('<li class="active"><a data-toggle="tab" href="#option-'+option_id+'" data-attr-id="'+option_id+'">'+data.option.name+'</a></li>');
}
});
});
});
html TABS:
<div class="tab-content options_tab">
<div id="product" class="tab-pane fade in active">
<div class="form-group">
<label for="" class="control-label col-md-2">{{ __('Optiuni') }}</label>
</div>
</div>
答案 0 :(得分:0)
您是绑定事件处理程序而不是事件处理程序,因此click
元素#add_opt
处理程序的每个click
事件都添加了.close_op
和#select_new_opt
元素
将事件绑定移到click
处理程序之外。
$('#add_opt').click(function() {
....
});
$('.close_op').click(function() {
...
});
$('#select_new_opt').click(function() {
...
});
在动态生成元素时,请使用Event Delegation委托事件方法{/ 3}}。
实施例
$(document).on('click', ".close_op", function(){
$('#select_opt').hide();
});
代替document
,您应该使用最近的静态容器。