Подія завантаження 3 jquery для активної зміни вкладки


286

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

Як про це піти?

Мета-редагування: див. Коментар


3
Це було дійсно корисно! Якщо ми хочемо стежити лише за певною вкладкою, ми можемо спостерігати за $ ("a [href = '# tab_name']") on ('показано.bs.tab', fn) Звичайно, ми можемо вказати подальші селектори, якщо a [href = '# tab_name'] не гарантовано є унікальним.
msanjay

Можливий дублікат Twitter Bootstrap
Виконай

@rogerdpack « stackoverflow.com/questions/13164239 / ... » здається заплутаним для перенаправлення, це запитувач взяв неправильний шлях і шукали відповідь в це області видимості, мова йде про дуже довго і специфічних і загальноприйнятому відповідь , здається, відображають , що з - за це, безумовно, не вірна відповідь на моє запитання. Той факт, що це питання не допомогло, оскільки багато людей, мабуть, пов'язане з цим.
Гербен Рампарт

Відповіді:


451

Ерік Сапе знає, як це зробити

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


Велике спасибі, витратили на це доволі багато часу, перш ніж знайти свою відповідь, ви рок!
Хаджаят

1
Якщо вам доведеться скористатися подією зміни (незалежно від дії за посиланням), просто скористайтеся$(document).on('shown.bs.tab', function (e) { console.log('ae'); });
Aline Matos

Ідеально, врятувало мені багато часу з цим!
Джастін

У мене є невеликі сумніви в цьому. Я оголосив targetяк глобальну змінну і призначив значення, як згадувалося вище. Коли я вперше завантажую сторінку, я отримую значення (попередження) цілі як невизначене. Але коли я змінюю вкладку і призначу цільове значення, я не отримую жодного попередження. Навіть не повідомлення про помилку. Що мені робити, щоб вивести його поза цією петлею? Я оголосив змінну за межами функції document.ready.
SSS

Це працює лише в тому випадку, якщо я натискаю іншу вкладку. Як додати цей тригер до вкладки за замовчуванням? Мені потрібно завантажити ajax на кожну вкладку. Але при цьому воно завантажується лише тоді, коли я натискаю іншу вкладку, а потім знову першу.
Kārlis Janisels

89
$(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" і потім зателефонувати до аякса.


Так, просто attr ('href') ніколи не є emplty. Він повертає ідентифікатор вкладки.
Флорін

1
Я розумію. Я думаю, що мій коментар для всіх був зосереджений на біті "показаний.bs.tab". Мені було дуже важко відстежувати це.
Гербен Рампарт

1
Okok ... додано: порожній селектор.
Гербен Рампарт

Дякую. Як шарм!
dani herrera

Дякую @Florin. моя проблема вирішена з вашою функцією. ПОДІБНО ДО!
Aiyoub Amini

32

Завдяки публікації @ Гербен дізнався, що існують дві події 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');
 });

демонстрація


Чудове рішення, мені потрібно впійматись після події на вкладці та зателефонувати на мою кутову функцію, це рішення врятувало мене пару годин!
Аллен

10

Щоб додати відповідь Мош Феу, якщо вкладки, де створено на льоту, як у моєму випадку, ви використовували б наступний код

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

});

Я сподіваюся, що це комусь допоможе


8

Це працювало для мене.

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

Для мене прекрасно працює.
MattD

1
Цей привіт-джеки завантажує функцію вкладки за замовчуванням. Якщо вам доведеться це зробити, ваші вкладки не ініціалізуються.
Архонічний

2
Це "хакі" спосіб, якого слід уникати.
Juni Brosas

2

Я використовую інший підхід.

Просто спробуйте знайти все, з aчого idпочинається деяка підрядка .

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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.