Bootstrap 3 événement jquery pour le changement d'onglet actif
J'ai passé une quantité irréaliste de temps à essayer de tirer une fonction lorsque l'onglet change de l'onglet bootstrap 3 / navbar et littéralement toutes les suggestions que google a crachées étaient fausses/ne fonctionnaient pas.
Comment s'y prendre?
Meta-edit: voir commentaire
6 réponses
Eric Saupe sait comment le faire
$('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>
$(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');
}
});
Le problème est que attr('href') n'est jamais vide.
, Ou de comparer les #id = "#valeur" et ensuite appeler l'ajax.
Grâce au post de @Gerben, il y a deux événements show. BS. tab (avant que l'onglet ne soit affiché) et shown.BS.tab (après que l'onglet soit affiché) comme expliqué dans les documents - onglet Bootstrap Utilisation
Une solution supplémentaire si nous ne sommes intéressés que par un onglet spécifique, et peut-être ajouter des fonctions séparées sans avoir à ajouter un bloc if - else dans une fonction, est d'utiliser le sélecteur a href (peut-être avec des sélecteurs supplémentaires si obligatoire)
$("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');
});
Pour ajouter à la réponse Mosh Feu, si les onglets ont été créés à la volée comme dans mon cas, vous utiliseriez le code suivant
$(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');
}
});
J'espère que cela aide quelqu'un
Cela a fonctionné pour moi.
$('.nav-pills > li > a').click( function() {
$('.nav-pills > li.active').removeClass('active');
$(this).parent().addClass('active');
} );
J'utilise une autre approche.
Juste essayer de trouver tous les a
où id
commence à partir de certains sous-chaîne.
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>