52 votes

Passer à l'onglet sélectionné par son nom dans les onglets de Jquery-UI

Si j'ai trois onglets :

<div id="tabs">
    <ul>
        <li><a href="#sample-tab-1"><span>One</span></a></li>
        <li><a href="#sample-tab-2"><span>Two</span></a></li>
        <li><a href="#sample-tab-3"><span>Three</span></a></li>
    </ul>
</div>

Je voudrais passer à l'onglet #sample-tab-2 par son nom. Je sais que je peux passer à un onglet si je connais son numéro, mais dans le cas que j'ai rencontré, je ne le sais pas.

Notes : JQuery 1.3.1 / JQuery-UI 1.6rc6

1 votes

Donc, vous voulez sélectionner l'onglet "Trois", peu importe où il se trouve ? Pourquoi connaissez-vous le mot "Trois" mais pas l'ID ou le numéro ? Cette approche peut être problématique si vous traduisez un jour votre site... pouvez-vous développer ce problème ?

1 votes

Bien sûr, ce que j'essaie de faire est décrit ici : stackoverflow.com/questions/572376/ L'approche que j'essaie maintenant est de modifier le hachage pour ajouter un caractère au nom du hachage, et ensuite, au chargement de la page, sélectionner cet onglet (sans le caractère).

1 votes

En gros, <a href="#_sample-tab-1"> définirait l'emplacement de la fenêtre à #sample-tab-1, puis, lorsque la page est chargée ( index.php#sample-tab-1), basculerait vers #_sample-tab-1.

87voto

Christian George Points 646

Je n'ai pas réussi à faire fonctionner la réponse précédente. J'ai fait ce qui suit pour obtenir l'index de l'onglet par nom :

var index = $('#tabs a[href="#simple-tab-2"]').parent().index();
$('#tabs').tabs('select', index);

13 votes

Cette réponse n'est plus le moyen le plus "court" de le faire, car jQueryUI a tout simplement évolué depuis 2010. Si vous êtes de ceux qui prennent pour acquis la réponse sélectionnée / la plus votée et ne font pas défiler les autres, voici un joli sucre syntaxique qui a été ajouté depuis : $("#tabs").tabs("select", "#sample-tab-1");

12 votes

JqueryUI a encore évolué, voici la nouvelle solution : $("#tabs").tabs("option", "active", $(tabName + "Selector").index()); Voir ce jsfiddle pour plus d'informations : jsfiddle.net/vpJC3

2 votes

Vous devez déduire 1 de l'index. Parce que l'indice du tableau et l'indice de l'élément diffèrent de 1. Écrivez comme ceci : $("#tabs").tabs().tabs("option", "active", $("#Tab-1").index() - 1) ;

34voto

Eran Medan Points 12234

Il semble que l'utilisation de l'id fonctionne aussi bien que l'index, par exemple, en faisant simplement ceci, cela fonctionnera tout de suite...

$("#tabs").tabs("select", "#sample-tab-1");

Ceci est bien documenté dans le documents officiels :

" Sélectionner un onglet, comme s'il était cliqué. Le second argument est l'indice index basé sur zéro de l'onglet à sélectionner ou le sélecteur id du panneau du panneau auquel l'onglet est associé (l'identificateur de fragment href de l'onglet), par exemple un dièse, pointe vers l'identifiant du panneau). "

Je suppose que cela a été ajouté après que cette question ait été posée et probablement après la plupart des réponses.

2 votes

Votre exemple devrait juste être $("#tabs").tabs("select", "#sample-tab-1"); conformément à la documents les plus récents .

0 votes

@iano Vous avez raison... la documentation semble avoir changé... merci.

0 votes

@JBCP ça a l'air bien, mais j'avais peur que ce soit comme ça. Pourquoi ont-ils régressé vers une API moins pratique sans aucune explication, je suis sûr qu'ils ont une sorte d'explication, je n'en vois aucune.

26voto

$('#tabs').tabs('select', index); 

Les méthodes `'select' ne sont pas supportées dans jquery ui 1.10.0. http://api.jqueryui.com/tabs/

J'utilise ce code, et cela fonctionne correctement :

  $('#tabs').tabs({ active: index });

0 votes

C'est bien que Hamid ait mentionné la version jquery ui. Dommage qu'ils aient récemment modifié l'API et supprimé des fonctionnalités de base comme l'ajout d'onglets (déprécié dans la version 1.9, supprimé dans la version 1.10). Je ne pense pas que je serai capable de voir au-delà de ça dans leur philosophie. C'est comme vendre une voiture avec un groupe motopropulseur mais sans sièges.

12voto

bdukes Points 54833

Vous pouvez obtenir l'index de l'onglet par son nom avec le script suivant :

var index = $('#tabs ul').index($('#simple-tab-2'));
$('#tabs ul').tabs('select', index);

0 votes

Cela ne fonctionne pas avec moi. La réponse de Christian George a fonctionné. Quelle version de jquery utilisez-vous ? J'utilise la version 1.4.3.

0 votes

@Nassign ouais, il semble que ma réponse ne fonctionne pas (il essaie de sélectionner le li comme s'il avait l'ID simple-tab-2 au lieu de l'avoir comme un href ).

0 votes

Existe-t-il un moyen de changer d'onglet en utilisant ce code tout en ancrant la page ?

6voto

xmoonlight Points 71

Seul ce code fonctionne réellement !

$('#tabs').tabs();
$('#tabs').tabs('select', '#sample-tab-2');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X