bootstrap tabs。すべてが正常に機能しますが、タブを動的に追加するために使用するタブではなく、新しく作成したタブをアクティブにしてフォーカスしたいです。
これはフィドルです: http://jsfiddle.net/isherwood/F33Av/4/
そして、これは問題のコードです:
HTML:
<div class="container">
<ul class="nav nav-tabs">
<li class="active"><a href="#contact_01" data-toggle="tab">Joe Smith</a><span>x</span></li>
<li><a href="#contact_02" data-toggle="tab">Molly Lewis</a><span>x</span> </li>
<li><a href="#" class="add-contact" data-toggle="tab">+ Add Contact</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>
</div>
JS:
$(".nav-tabs").on("click", "a", function(e){
e.preventDefault();
$(this).tab('show');
})
.on("click", "span", function () {
var anchor = $(this).siblings('a');
$(anchor.attr('href')).remove();
$(this).parent().remove();
$(".nav-tabs li").children('a').first().click();
});
$('.add-contact').click(function(e) {
e.preventDefault();
var id = $(".nav-tabs").children().length; //think about it ;)
$(this).closest('li').before('<li><a href="#contact_'+id+'">New Tab</a><span>x</span></li>');
$('.tab-content').append('<div class="tab-pane" id="contact_'+id+'">Contact Form: New Contact '+id+'</div>');
});
CSS:
@import url('http://getbootstrap.com/2.3.2/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;
}
解決策は次のとおりです。
[連絡先の追加] navlinkがクリックされたときに、tab('show')
はまだ呼び出されています。 show tab関数が呼び出されても、既存のコンテンツがリンクされていないため、タブコンテンツは表示されません。そのタブのアクティブ化を停止する条件を追加しました。
_$(".nav-tabs").on("click", "a", function (e) {
e.preventDefault();
if (!$(this).hasClass('add-contact')) {
$(this).tab('show');
}
})
_
また、「連絡先の追加」navlinkから_data-toggle="tab"
_属性を削除しました。何らかの理由で、「連絡先の追加」タブがある場合はそれをアクティブにします。
_<li><a href="#" class="add-contact">+ Add Contact</a></li>
_
新しいタブを追加したら、tab('show')
関数が呼び出されるように、新しいタブのclick
をトリガーします。 (1を参照)
_$('.add-contact').click(function (e) {
e.preventDefault();
var id = $(".nav-tabs").children().length; //think about it ;)
var tabId = 'contact_' + id;
$(this).closest('li').before('<li><a href="#contact_' + id + '">New Tab</a> <span>x</span></li>');
$('.tab-content').append('<div class="tab-pane" id="' + tabId + '">Contact Form: New Contact ' + id + '</div>');
// add this
$('.nav-tabs li:nth-child(' + id + ') a').click();
});
_
ここに私が見つけた別の解決策があります:
JavaScript:
$('#btnAdd').click(function (e) {
var nextTab = $('#tabs li').size()+1;
// create the tab
$('<li><a href="#tab'+nextTab+'" data-toggle="tab">Tab '+nextTab+'</a></li>').appendTo('#tabs');
// create the tab content
$('<div class="tab-pane" id="tab'+nextTab+'">tab' +nextTab+' content</div>').appendTo('.tab-content');
// make the new tab active
$('#tabs a:last').tab('show');
});
HTML:
<div class="container">
<h1>Bootstrap Dynamic Tabs</h1>
<div class="well">
<a href="#" id="btnAdd"><i class="icon-plus-sign-alt"></i>Add Tab</a>
<br><br>
<ul class="nav nav-tabs" id="tabs">
<li class="active"><a href="#tab1" data-toggle="tab">Tab 1</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab1">Hello tab #1 content...</div>
</div>
</div>
<a href="http://www.bootply.com/61679">Edit on Bootply</a>..
</div>
ここでデモと編集 https://www.bootply.com/61679