Bootstrap 3 событие jquery для изменения активной вкладки

Я потратил нереалистичное количество времени, пытаясь запустить функцию, когда вкладка изменила вкладку bootstrap 3/navbar и буквально все предложения, которые выложили в google, были неправильными/не работали.

Как это сделать?

Мета-редактирование: см. комментарий

Ответ 1

Эрик Саупе знает, как это сделать: http://ericsaupe.com/tag/bootstrap-3-tabs-example-ajax/

$('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>

Ответ 2

$(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');
    }
});

проблема заключается в том, что attr ('href') никогда не бывает пустым.

Или сравнить #id = "# some value", а затем вызвать ajax.

Ответ 3

Благодаря сообщению @Gerben стало известно, что есть два события show.bs.tab(до отображения вкладки) и показанный .bs.tab(после отображения вкладки), как описано в документах - вкладка Bootstrap

Дополнительное решение, если нас интересует только конкретная вкладка и, возможно, добавляет отдельные функции без необходимости добавления блока if-else в одну функцию, заключается в использовании селектора href (возможно, вместе с дополнительными селекторами, если требуется )

 $("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');
 });

демо

Ответ 4

Чтобы добавить к Моше Фэй ответ, если вкладки, созданные на лету, как в моем случае, вы использовали бы следующий код

$(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');
    }

});

Я надеюсь, что это поможет кому-то

Ответ 5

Это сработало для меня.

$('.nav-pills > li > a').click( function() {
    $('.nav-pills > li.active').removeClass('active');
    $(this).parent().addClass('active');
} );