jQuery UI tabs. Comment sélectionner un onglet basé sur son id non basé sur l'index

j'ai deux onglets et configuré usign jQuery UI.

ul  class="tabs"
  li  tabone
  li tabtwo
ul

dynamiquement à partir du code C # derrière je vais cacher ou sélectionner un onglet disons tabtwo 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 index d'onglet pour le faire.

y a-t-il une alternative pour sélectionner les onglets en fonction de leur nom/id?

44
demandé sur Jason Aller 2011-05-06 18:21:15

14 réponses

Note: En raison des changements apportés à jQuery 1.9 et jQuery UI, cette réponse n'est plus la bonne. Voir la réponse de @stankovski ci-dessous.

vous devez d'abord trouver l'index de l'onglet (qui est juste sa position dans une liste) et ensuite sélectionner spécifiquement l'onglet en utilisant L'événement select fourni par jQuery UI ( onglets->sélectionner ).

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

mise à jour: BTW-je réalise qu'il est (en fin de compte) encore en train de sélectionner par index. Mais, il n'est pas nécessaire que vous connaissiez la position spécifique des onglets (en particulier lorsqu'ils sont générés dynamiquement comme demandé dans la question).

15
répondu JasCav 2013-04-11 15:06:02

réponse acceptée n'a pas fonctionné pour moi non plus, mais j'ai trouvé la solution dans un fil similaire: Basculer vers l'onglet sélectionné par nom dans Jquery-UI Tabs

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);
124
répondu stankovski 2017-05-23 12:34:44

à partir du document le plus récent, la méthode select prend un index ou l'id du panneau de l'onglet (la valeur hash href). La documentation dit:

sélectionnez un onglet, comme s'il avait été cliqué. Le deuxième argument est le index à base zéro de l'onglet à sélectionner ou le sélecteur d'id du panneau de l'onglet est associé à l'onglet href identificateur de fragment, par exemple hachage, indique l'id du panneau).

ainsi, étant donné une disposition comme

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

œuvres

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

voici un exemple .

mise à JOUR

la solution ci-dessus fonctionne dans les versions jQuery UI inférieures à 1.9. Pour une solution dans les versions 1.9+ voir @stankovski réponse .

14
répondu Garett 2017-05-23 12:18:20

il peut avoir des effets secondaires s'il y a d'autres auditeurs, et il ne se sent pas aussi agréable que d'interagir à travers L'API plugins -- mais il donne un code moins verbeux si vous" cliquez " sur l'onglet, plutôt que de compter son index et de le mettre actif par la suite, et c'est assez intuitif ce qui se passe. De plus, il n'échouera pas si les gars de l'interface-utilisateur décident de renommer l'option à nouveau.

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

il est curieux, cependant, que le code des onglets ui a une méta-fonction ( _getIndex ) avec le commentaire:

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

mais ne l'utilise pas pour définir l'option active, seulement lors de l'appel enable, disable et load.

2
répondu Torin Finnemann 2013-05-21 12:30:51

actif 1er onglet

$("#workflowTab").tabs({ active: 0 });

dernier onglet actif

$("#workflowTab").tabs({ active: -1 });

Active 2ème onglet

$("#workflowTab").tabs({ active: 1 });

son travail comme un tableau

2
répondu Sarbasish Mishra 2018-07-02 07:11:44

aucune de ces réponses n'a fonctionné pour moi. Je viens de contourné le problème. J'ai fait ceci:

$('#tabs-tab1').removeClass('tabs-hide');
$('#tabs-tab2').addClass('tabs-hide');
$('#container-tabs a[href="#tabs-tab2"]').parent().removeClass('tabs-selected');
$('#container-tabs a[href="#tabs-tab1"]').parent().addClass('tabs-selected');

ça marche très bien.

1
répondu Elisabeth 2012-12-11 16:50:15
                <div id="tabs" style="width: 290px">
                    <ul >
                        <li><a id="myTab1" href="#tabs-1" style="color: Green">Báo cáo chuẩn</a></li>
                        <li><a id="myTab2" href="#tabs-2" style="color: Green">Báo cáo mở rộng</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 liệu</a></li>
                        </ul>
                    </div>
                </div>


        var index = $("#tabs div").index($("#tabs-1" ));
        $("#tabs").tabs("select", index);
       $("#tabs-1")[0].classList.remove("ui-tabs-hide");
1
répondu Tranvanlam085 2012-12-13 10:47:08

selon UI Doc:

  1. obtenez D'abord l'index de l'onglet que vous voulez activer.

    var index = $('#tabs a[href="'+id+'"]').parent().index();
    
  2. Activer

    tabs.tabs( "option", "active", index );
    
1
répondu Mohan Dere 2014-07-07 05:03:29

en S'appuyant sur la réponse de @stankovski, une façon plus précise de le faire qui fonctionnera pour tous les cas d'utilisation (par exemple, quand un onglet est chargé via ajax et donc l'attribut HREF de l'ancre ne correspond pas avec le hachage), l'id dans tous les cas correspond avec l'attribut "aria-controls" de l'élément li. Par exemple, si vous essayez d'activer un onglet basé sur l'emplacement.de hachage, qui est à l'onglet id, alors il est préférable de rechercher pour "aria-controls" que pour "href".

avec jQuery UI > = 1,9:

var index = $('#tabs > ul > li[aria-controls="simple-tab-2"]').parent().index();
$("#tabs").tabs("option", "active", index);

en cas de paramétrage et de vérification du hachage d'url:

lors de la création des onglets, Utilisez l'événement 'activate' pour définir l'emplacement.hash à l'id du panneau:

$('#tabs').tabs({
  activate: function(event, ui) {                   
      var scrollTop = $(window).scrollTop(); // save current scroll position
      window.location.hash = ui.newPanel.attr('id');
      $(window).scrollTop(scrollTop); // keep scroll at current position
  }    
});

puis utilisez l'événement hashchange fenêtre pour comparer l'emplacement.hachez l'id du panneau (faites ceci en recherchant l'attribut aria-controls de l'élément li):

$(window).on('hashchange', function () {
  if (!location.hash) {
    $('#tabs').tabs('option', 'active', 0);
    return;
  }

  $('#tabs > ul > li').each(function (index, li) {
    if ('#' + $(li).attr('aria-controls') == location.hash) {
      $('#tabs').tabs('option', 'active', index);
      return;
    }
  });


});

ça va s'occuper de tout cas, même lorsque les onglets utilisent ajax. En outre, si vous avez emboîté les onglets, il n'est pas trop difficile de gérer que l'un ou l'autre en utilisant un peu plus de logique.

1
répondu JohnRDOrazio 2015-10-17 09:56:52

j'ai trouvé cela fonctionne plus facilement que d'obtenir un indice. Pour mes besoins, je sélectionne un onglet basé sur un hachage d'url

var target = window.location.hash.replace(/#/,'#tab-');
if (target) { 
    jQuery('a[href='+target+']').click().parent().trigger('keydown');      
}   
1
répondu David Smyth 2016-09-19 21:05:42

C'est la réponse

var index = $('#tabs a[href="#simple-tab-2"]').parent().index();
$("#tabs").tabs("option", "active", index);
1
répondu daniel medina 2018-01-19 06:30:41

je fais une supposition sauvage que vous avez vraiment la disposition comme:

<ul  class="tabs">
  <li id="tabone">one</li>
  <li id="tabtwo">two</li>
</ul>

si cette hypothèse est correcte, vous utilisez simplement L'ID pour sélectionner" tab "

$('#tabone').css("display","none");

modifier: sélectionnez l'onglet sur votre mise en page:

var index = $('.tabs ul').index($('#tabone')); 
$('.tabs ul').tabs('select', index); 
0
répondu Mark Schultheiss 2011-05-06 15:04:31

j'ai fait comme ça

if (document.location.hash != '') {
   //get the index from URL hash
   var tabSelect = document.location.hash.substr(1, document.location.hash.length);
   console.log("tabSelect: " + tabSelect);
   if (tabSelect == 'discount')
   { 
       var index = $('#myTab a[href="#discount"]').parent().index();
       $("#tabs").tabs("option", "active", index);
       $($('#myTab a[href="#discount"]')).tab('show');
   }
}
0
répondu Academy of Programmer 2014-12-02 12:15:35

$("#onglets").les onglets({active: [0,2], désactivée: [3],sélectionné: 2}); Où sélectionné est utilisé pour ouvrir L'onglet particulier ou sélectionner L'onglet particulier onload.

0
répondu Durgesh.M 2016-08-03 06:57:40