48 votes

Les onglets de jQuery UI. Comment sélectionner un onglet en fonction de son id et non en fonction de son index ?

J'ai deux onglets et je les ai configurés en utilisant jQuery UI.

ul  class="tabs"
  li  tabone
  li tabtwo
ul

dynamiquement à partir du code C#, je vais cacher ou sélectionner un onglet, disons l'onglet 2. et l'autre onglet doit être caché ou non affiché. Je peux le faire en JavaScript en utilisant .tabs({selected:1}); et .tabs(disable:0). mais je ne veux pas utiliser les indices de tabulation pour le faire.

Existe-t-il une alternative pour sélectionner les onglets en fonction de leur nom/identifiant ?

0 votes

Postez un code pour qu'on puisse travailler avec, d'accord ?

0 votes

0 votes

135voto

stankovski Points 1294

La réponse acceptée n'a pas fonctionné pour moi non plus, mais j'ai trouvé une solution dans un fil similaire : Passer à l'onglet sélectionné par son nom dans les onglets de Jquery-UI

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

Avec jQuery UI >= 1.9 :

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

1 votes

Il y a une solution beaucoup plus facile maintenant, il semble que l'utilisation de l'id fonctionne aussi bien que l'index, par exemple en faisant simplement ceci... $("#tabs").tabs("select", "#sample-tab-1"); Ceci est bien documenté dans les docs officiels : " Sélectionner un onglet, comme s'il était cliqué ". Le second argument est l'index basé sur zéro de l'onglet à sélectionner ou le sélecteur d'id du panneau auquel l'onglet est associé (l'identifiant du fragment href de l'onglet, par exemple hash, pointe vers l'id du panneau)."

1 votes

Cette mise à jour pour jQuery UI >= 1.9 a sauvé ma vie. J'avais un vieux code qui ne fonctionnait plus après la mise à jour. Merci @Andreas Schwarz. C'est pourquoi il est si important de mettre à jour les anciennes réponses. J'essaie toujours de le faire... :)

1 votes

J'ai mis une autre solution ici : jsfiddle.net/WXxnr Je pense que c'est plus facile et que cela fonctionne pour Jquery 2.0.

19voto

JasCav Points 18931

Remarque : en raison des modifications apportées à jQuery 1.9 et à jQuery UI, cette réponse n'est plus la bonne. Veuillez consulter la réponse de @stankovski ci-dessous.

Vous devez d'abord trouver l'index de l'onglet (qui est simplement sa position dans une liste), puis sélectionner spécifiquement l'onglet à l'aide de l'événement select fourni par jQuery UI ( onglets->sélection ).

var index = $('#tabs ul').index($('#tabId'));
$('#tabs ul').tabs('select', index);

Mise à jour : BTW - Je suis conscient qu'il s'agit (en fin de compte) d'une sélection par index. Mais, il n'est pas nécessaire de connaître la position spécifique des onglets (en particulier lorsqu'ils sont générés dynamiquement comme demandé dans la question).

1 votes

Cela ne fonctionne pas. il retourne toujours -1 pour l'index. savez-vous pourquoi ?

0 votes

@user695663 - Est-ce que vous mettez la bonne valeur d'ID ? (Ce ne sera pas #tabId - ce sera l'ID de votre onglet).

0 votes

Il semble qu'il s'agisse d'un saut en haut de la page après avoir changé d'onglet. Puis-je changer d'onglet sans sauter en haut de la page ?

15voto

Garett Points 9597

D'après le document le plus récent, le sélectionnez prend un index ou l'id du panneau de l'onglet (la valeur de hachage). La documentation indique :

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

Ainsi, avec une mise en page comme

<div id="myTabs">    
    <ul  class="tabs">
      <li><a href="#tabone">tabone</a></li>
      <li><a href="#tabtwo">tabtwo</a></li>
    </ul>   
</div>

les travaux suivants

$('#myTabs').tabs('select', '#tabtwo');

Voici un exemple .

UPDATE

La solution ci-dessus fonctionne dans les versions de jQuery UI inférieures à 1.9. Pour une solution dans les versions 1.9+, voir l'article de @stankovski. réponse .

0 votes

Comment se fait-il que l'ancre <a> n'ait rien après le hachisch (#) ?

2voto

Torin Finnemann Points 346

Cela peut avoir des effets secondaires s'il y a d'autres écouteurs, et ce n'est pas aussi agréable que d'interagir à travers l'API des plugins -- mais cela donne un code moins verbeux si on "clique" simplement sur l'onglet, plutôt que de compter son index et de l'activer ensuite, et c'est assez intuitif ce qui se passe. De plus, cela n'échouera pas si les ui-guys décident de renommer l'option à nouveau.

$('#tabs').tabs(); 
$('#tabs a[href="#tabtwo"]').click();

Il est cependant intriguant de constater que le code des onglets de l'interface utilisateur possède une métafonction ( _getIndex ) avec le commentaire :

"meta-fonction pour donner aux utilisateurs l'option de fournir une chaîne de href au lieu de d'un indice numérique"

mais ne l'utilise pas lors de la définition de l'option active, seulement lors des appels enable, disable et load.

1voto

Tranvanlam085 Points 11
                <div id="tabs" style="width: 290px">
                    <ul >
                        <li><a id="myTab1" href="#tabs-1" style="color: Green">Báo cáo chuan</a></li>
                        <li><a id="myTab2" href="#tabs-2" style="color: Green">Báo cáo mo rong</a></li>
                    </ul>
                    <div id="tabs-1" style="overflow-x: auto">
                        <ul class="nav">

                            <li><a href="@Url.Content("~/Report/ReportDate")"><span class=""></span>Báo cáo theo ngày</a></li>

                        </ul>
                    </div>
                    <div id="tabs-2" style="overflow-x: auto; height: 290px">
                        <ul class="nav">

                            <li><a href="@Url.Content("~/Report/PetrolReport#tabs-2")"><span class=""></span>Báo cáo nhiên lieu</a></li>
                        </ul>
                    </div>
                </div>

        var index = $("#tabs div").index($("#tabs-1" ));
        $("#tabs").tabs("select", index);
       $("#tabs-1")[0].classList.remove("ui-tabs-hide");

0 votes

Veuillez expliquer votre réponse.

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