Capture 'montré' événement de bootstrap onglet
J'ai quelques "statique" HTML sur ma page:
<div id="DIVISIONS">
<ul class="nav nav-tabs" id="DIVISIONTABS">
@* <li> nodes will be injected here by javascript *@
</ul>
<div class="tab-content" id="DIVISIONTABPANES">
@* <div class="tab-pane"> nodes will be injected here by javascript *@
</div>
</div>
Au chargement de la page, j'ai créer un onglet "cadre", c'est à dire créer le fichier de bootstrap onglets et des conteneurs de contenu.
- Je déclencher le processus avec:
$(window).bind("load", prepareDivisionTabs);
Et "prepareDivisionTabs" fait ceci:
function prepareDivisionTabs() {
//Retrieve basic data for creating tabs
$.ajax({
url: "@Url.Action("GetDivisionDataJson", "League")",
cache: false
}).done(function (data) {
var $tabs = $('#DIVISIONTABS').empty();
var $panes = $('#DIVISIONTABPANES').empty();
for (var i = 0; i < data.length; i++) {
var d = data[i];
$tabs.append("<li><a href=\"#TABPANE" + d.DivisionId + "\" data-toggle=\"tab\">" + NMWhtmlEncode(d.Name) + "</a></li>");
$panes.append("<div id=\"TABPANE" + d.DivisionId + "\" class=\"tab-pane\"></div>")
}
renderDivisionTabPaneContents(data);
}).fail(function (err) {
alert("AJAX error in request: " + JSON.stringify(err, null, 2));
});
}
Pour info, le "renderDivisionTabPaneContents" dans le ci-dessus ne ce:
function renderDivisionTabPaneContents(data) {
for (var i = 0; i < data.length; i++) {
var d = data[i];
renderDivisionTabPaneContent(d.DivisionId);
}
}
function renderDivisionTabPaneContent(id) {
var $tabPane = $('#TABPANE' + id);
$tabPane.addClass("loader")
$.ajax({
url: "/League/GetDivisionPartialView?divisionId=" + id,
cache: false
}).done(function (html) {
$tabPane.html(html);
}).fail(function (err) {
alert("AJAX error in request: " + JSON.stringify(err, null, 2));
}).always(function () {
$tabPane.removeClass("loader")
});
}
Tout bon jusqu'ici. Mon chargement de la page, mon onglet contenu sont rendus, et quand je clique sur les différents onglets, le contenu est affiché.
Maintenant, plutôt que de charger tout le contenu au début, je veux charger le contenu de l'onglet juste-à-temps à l'aide de la 'montré' événement des onglets. Pour tester cela, je voulais juste m'assurer que je pouvais obtenir une alerte javascript lorsque l'onglet est affiché. Donc, j'ai créer ce qui suit pour déclencher l'attachement de l'onglet événements:
$(function () {
attachTabShownEvents();
})
qui appelle:
function attachTabShownEvents() {
$(document).on('shown', 'a[data-toggle="tab"]', function (e) {
alert('TAB CHANGED');
})
}
J'avais donc s'attendre à voir l'ONGLET "CHANGÉ" alerte après le changement d'onglet. Mais ... je ne vois pas d'alertes.
Quelqu'un pourrait-il m'aider ici?
- Avez-vous essayé de remplacer
$(window).bind("load", prepareDivisionTabs);
avec$(prepareDivisionTabs);
? - Je vais lui donner un aller et d'en faire rapport, mais qu'une partie du processus semble très bien pour le moment que les onglets créés lors de "prepareDivisionTabs" fonctionne correctement. C'est juste l'événement postérieur à la gestionnaire que j'essaie d'ajouter qui ne fonctionne pas. Mise à JOUR: Viens de faire le changement proposé et le comportement est identique (c'est à dire les onglets de l'écran de comportement, mais encore ne pas déclencher le 'montré' événement).
- Oh, et je crois que l'événement se lier devrait être
shown.bs.tab
, passhown
- "le montre.bs.onglet" craqué! Un grand merci 'vent'.
Vous devez vous connecter pour publier un commentaire.
L'événement correct de liaison pour l'onglet changement est
shown.bs.tab
.Utiliser mon package Nuget pour lazyloading bootstrap onglets ici, elle est très simple,
ajoutez juste "lazyload" classe "ul" élément de bootstrap onglets, puis ajouter des données ("data-url" égal à l'url à charger tous les onglets d'ancrage de l'élément (un). thats it.
https://www.nuget.org/packages/MT.BootstrapTabsLazyLoader.js/
"show" et "montré" des événements n'a pas fonctionné pour moi. Ma solution n'est pas exactement spécifiquement OP de la situation, mais les concepts généraux sont là.
J'ai eu le même problème avec bootstrap forcer son propre événement onclick
sur onglets (boutons de menu et le contenu des panneaux). Je voulais paresseux charger des trucs dans un panneau en fonction de ce menu bouton a été cliqué, et quelques boutons de montrer un panneau sur la page en cours, d'autres ont été pour charger une page dans un iframe.
Au début, j'ai farci des données dans un champ de formulaire masqué tag, qui a le même problème. L'astuce consiste à détecter une sorte de changement et de la loi sur que. J'ai résolu le problème en forçant un changement et l'utilisation d'un autre événement à l'écoute sur les boutons sans avoir à toucher bootstrap.
1) stash iframe cible de bouton comme attribut de données:
2) lier suppléant événement sur feu éteint truc,
et à l'intérieur, de changer la source iframe
3) de la force de "modifier" l'événement sur le panneau montre, puis de charger iframe src
ou vous pouvez mettre les déclencheurs de changement dans le mouseup ci-dessus.