Подія завантаження 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.