Bootstrap 3 sekmesi / navbar sekmesi değişiklikleri tam anlamıyla google tükürdü tüm önerileri yanlış / işe yaramadı bir işlevi ateş etmeye çalışırken gerçekçi olmayan bir süre geçirdim .
Bu nasıl yapılır?
Meta düzenleme: yoruma bakın
Bootstrap 3 sekmesi / navbar sekmesi değişiklikleri tam anlamıyla google tükürdü tüm önerileri yanlış / işe yaramadı bir işlevi ateş etmeye çalışırken gerçekçi olmayan bir süre geçirdim .
Bu nasıl yapılır?
Meta düzenleme: yoruma bakın
Yanıtlar:
Eric Saupe bunu nasıl yapacağını biliyor
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(e.target).attr("href") // activated tab
alert(target);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<ul id="myTab" class="nav nav-tabs">
<li class="active"><a href="#home" data-toggle="tab">Home</a></li>
<li class=""><a href="#profile" data-toggle="tab">Profile</a></li>
</ul>
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="home">
home tab!
</div>
<div class="tab-pane fade" id="profile">
profile tab!
</div>
</div>
$(document).on('shown.bs.tab', function (e) { console.log('ae'); });
target
Global değişken olarak ilan ettim ve değeri yukarıda belirtildiği gibi atadım. Sayfayı ilk yüklediğimde, hedefin değerini (uyarı) tanımsız olarak alıyorum. Ancak, sekmeyi değiştirip bu değeri hedefe atadığımda herhangi bir uyarı almıyorum. Bir hata mesajı bile yok. Bu döngünün dışına çıkarmak için ne yapmalıyım? Değişkeni document.ready işlevinin dışında beyan ettim.
$(function () {
$('#myTab a:last').tab('show');
});
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(e.target).attr("href");
if ((target == '#messages')) {
alert('ok');
} else {
alert('not ok');
}
});
sorun attr ('href') 'in asla boş olmamasıdır.
Veya #id = "#some değeri" ni karşılaştırıp ajax'ı çağırın.
@ Gerben'in gönderisi sayesinde, dokümanlarda açıklandığı gibi show.bs.tab (sekme gösterilmeden önce) ve shown.bs.tab (sekme gösterildikten sonra) olmak üzere iki etkinlik vardır - Bootstrap Sekmesi kullanımı
Yalnızca belirli bir sekmeyle ilgileniyorsak ve belki bir işlevde if - else bloğu eklemek zorunda kalmadan ayrı işlevler ekleyebileceğimiz ek bir çözüm, bir href seçicisini kullanmaktır (gerekirse ek seçicilerle birlikte olabilir).
$("a[href='#tab_target_id']").on('shown.bs.tab', function(e) {
console.log('shown - after the tab has been shown');
});
// or even this one if we want the earlier event
$("a[href='#tab_target_id']").on('show.bs.tab', function(e) {
console.log('show - before the new tab has been shown');
});
Mosh Feu cevabına eklemek için, benim durumumda olduğu gibi anında oluşturulan sekmeler aşağıdaki kodu kullanırsanız
$(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) {
var tab = $(e.target);
var contentId = tab.attr("href");
//This check if the tab is active
if (tab.parent().hasClass('active')) {
console.log('the tab with the content id ' + contentId + ' is visible');
} else {
console.log('the tab with the content id ' + contentId + ' is NOT visible');
}
});
Umarım bu birine yardım eder
Bu benim için çalıştı.
$('.nav-pills > li > a').click( function() {
$('.nav-pills > li.active').removeClass('active');
$(this).parent().addClass('active');
} );
Başka bir yaklaşım kullanıyorum.
Sadece tüm bulmaya a
nerede id
bazı başlar alt dize .
JS
$('a[id^=v-photos-tab]').click(function () {
alert("Handler for .click() called.");
});
HTML
<a class="nav-item nav-link active show" id="v-photos-tab-3a623245-7dc7-4a22-90d0-62705ad0c62b" data-toggle="pill" href="#v-photos-3a623245-7dc7-4a22-90d0-62705ad0c62b" role="tab" aria-controls="v-requestbase-photos" aria-selected="true"><span>Cool photos</span></a>