J'ai déjà utilisé jquery-ui tabs
extension pour charger des fragments de page via ajax
et pour masquer ou révéler les _div
s cachés dans une page. Ces deux méthodes sont bien documentées et je n’y ai rencontré aucun problème.
Maintenant, cependant, je veux faire quelque chose de différent avec les onglets. Lorsque l'utilisateur sélectionne un onglet, il doit recharger entièrement la page. La raison en est que le contenu de chaque section à onglets est un peu coûteux à restituer. Je ne souhaite donc pas les envoyer tous en une fois et utiliser la méthode normale. de basculer 'display: none' pour les révéler.
Mon plan consiste à intercepter l'événement select
des onglets et à laisser cette fonction recharger la page en manipulant document.location.
Comment, dans le gestionnaire select
, puis-je obtenir l'index de tabulation nouvellement sélectionné et l'objet html LI auquel il correspond?
$('#edit_tabs').tabs( {
selected: 2, // which tab to start on when page loads
select: function(e, ui) {
var t = $(e.target);
// alert("data is " + t.data('load.tabs')); // undef
// alert("data is " + ui.data('load.tabs')); // undef
// This gives a numeric index...
alert( "selected is " + t.data('selected.tabs') )
// ... but it's the index of the PREVIOUSLY selected tab, not the
// one the user is now choosing.
return true;
// eventual goal is:
// ... document.location= extract-url-from(something); return false;
}
});
Existe-t-il un attribut de l'événement ou de l'objet ui que je peux lire qui donne l'index, l'id ou l'objet de l'onglet nouvellement sélectionné ou de la balise d'ancrage qu'il contient?
Ou existe-t-il un meilleur moyen d'utiliser des onglets pour recharger toute la page?
Je voudrais jeter un oeil sur events for Tabs. Ce qui suit est tiré de la documentation jQuery:
$('.ui-tabs-nav').bind('tabsselect', function(event, ui) {
ui.options // options used to intialize this widget
ui.tab // anchor element of the selected (clicked) tab
ui.panel // element, that contains the contents of the selected (clicked) tab
ui.index // zero-based index of the selected (clicked) tab
});
On dirait que ui.tab est la voie à suivre.
dans l'interface utilisateur de jQuery - v1.9.2
ui.newTab.index()
obtenir un index de base 0 de l'onglet actif
select: function(e, ui){var index=ui.index;}
fonctionne bien pour moi. voir: http://api.jqueryui.com/tabs/#events
merci, jobscry - le 'ui.tab' que vous avez signalé m'a fourni la balise d'ancrage sur laquelle je peux extraire sa classe, son identifiant, son href, etc. Mon dernier appel onglets () ressemble à ceci:
$(document).ready(function() {
$('#edit_tabs').tabs( {
selected: [% page.selected_tab ? page.selected_tab : 0 %],
select: function(e, ui) {
// ui.tab is an 'a' object
// it has an id of "link_foo_bar"
// transform it into http://....something&cmd=foo-bar
var url = idToTabURL(ui.tab.id);
document.location = url;
return false;
}
}).show();
});
J'ai découvert deux manières de satisfaire à cette exigence, car il est difficile pour moi de mettre du code ici, vous pouvez le consulter/ http://ektaraval.blogspot.com/2011/09/calling-javascript- when-jquery-ui-tab.html
J'espère que ça aide quelqu'un ..
dans mon implémentation cela fonctionne comme:
$(document).ready(function() {
$('#edit_tabs').tabs( {
selected: [% page.selected_tab ? page.selected_tab : 0 %],
select: function(e, ui) {
// ui.tab is an 'a' object
var url = ui.tab.href;
document.location = url;
return false;
}
}).show();
});
Ou une autre option que j'ai utilisée pour mon site Web est la suivante. C'est un système de navigation de base UL/Div. La clé pour activer le bon onglet lorsque vous cliquez sur un lien vers une autre page avec un signe dièse attaché est simplement en filtrant votre UL pour le # exemple qui correspond à ce qui est transmis par le navigateur. C'est comme ça.
Voici l'exemple HTML:
<div id="tabNav">
<ul class="tabs">
<li><a href="#message">Send a message</a></li>
<li><a href="#shareFile">Share a file</a></li>
<li><a href="#arrange">Arrange a meetup</a></li>
</ul>
</div>
<div id="tabCont">
<div id="message">
<p>Lorem ipsum dolor sit amet.</p>
</div>
<div id="shareFile">
<p>Sed do eiusmod tempor incididunt.</p>
</div>
<div id="arrange">
<p>Ut enim ad minim veniam</p>
</div>
</div>
Et le Jquery pour y arriver:
$(document).ready(function() {
$(function () {
var tabs = [];
var tabContainers = [];
$('ul.tabs a').each(function () {
// note that this only compares the pathname, not the entire url
// which actually may be required for a more terse solution.
if (this.pathname == window.location.pathname) {
tabs.Push(this);
tabContainers.Push($(this.hash).get(0));
}
});
$(tabs).click(function () {
// hide all tabs
$(tabContainers).hide().filter(this.hash).show();
// set up the selected class
$(tabs).removeClass('active');
$(this).addClass('active');
return false;
});
$(tabs).filter(window.location.hash ? '[hash=' + window.location.hash + ']' : ':first').click();
});
});
Cela devrait en prendre soin pour vous. Je sais que ce n'est pas le code le plus propre, mais ça vous y mènera.
Un rapide coup d'œil dans la documentation nous donne la solution:
$('#edit_tabs').tabs({ selected: 2 });
La déclaration ci-dessus activera le troisième onglet.