Activation de l'onglet Bootstrap avec JQuery

J'ai le code suivant

<ul class="nav nav-tabs">
    <li><a href="#aaa" data-toggle="tab">AAA</a></li>
    <li><a href="#bbb" data-toggle="tab">BBB</a></li>
    <li><a href="#ccc" data-toggle="tab">CCC</a></li>
</ul>
<div class="tab-content" id="tabs">
    <div class="tab-pane" id="aaa">...Content...</div>
    <div class="tab-pane" id="bbb">...Content...</div>
    <div class="tab-pane" id="ccc">...Content...</div>
</div>

Et le script suivant

$(document).ready(function(){
    activaTab('aaa');
});

function activaTab(tab){
    $('.tab-pane a[href="#' + tab + '"]').tab('show');
};

Dans ce cas, lorsque la page est prête, le deuxième onglet sera activé mais j'obtiens toujours une erreur JavaScript dans la ligne $('.tab-pane a[href="#' + tab + '"]').tab();

Quelqu'un Peut m'aider s'il vous plaît?

54
demandé sur hkutluay 2013-07-24 13:52:18

6 réponses

L'application d'un sélecteur à partir du .nav-tabs semble fonctionner: Voir cette démo.

$(document).ready(function(){
    activaTab('aaa');
});

function activaTab(tab){
    $('.nav-tabs a[href="#' + tab + '"]').tab('show');
};

Je préférerais la réponse de @codedme, car si vous savez quel onglet vous voulez avant le chargement de la page, vous devriez probablement changer le html de la page et ne pas utiliser JS pour cette tâche particulière.

J'ai également modifié la démo pour sa réponse.

(si cela ne fonctionne pas pour vous, veuillez spécifier votre paramètre-navigateur, environnement, etc.)

124
répondu MasterAM 2015-01-19 19:48:52

Effectuez un clic sur le lien vers l'ancre de l'onglet chaque fois que la page est prête, c'est-à-dire

$('a[href="' + window.location.hash + '"]').trigger('click');

Ou en JavaScript vanille

document.querySelector('a[href="' + window.location.hash + '"]').click();
20
répondu Kamran Ahmed 2018-07-04 08:42:11
<div class="tabbable">
<ul class="nav nav-tabs">
    <li class="active"><a href="#aaa" data-toggle="tab">AAA</a></li>
    <li><a href="#bbb" data-toggle="tab">BBB</a></li>
    <li><a href="#ccc" data-toggle="tab">CCC</a></li>
</ul>
<div class="tab-content" id="tabs">
    <div class="tab-pane fade active in" id="aaa">...Content...</div>
    <div class="tab-pane" id="bbb">...Content...</div>
    <div class="tab-pane" id="ccc">...Content...</div>
</div>
</div>   

Ajoutez une classe active à tout élément li que vous souhaitez activer après le chargement de la page. Et aussi l'ajout de classe active au contenu div est nécessaire, fondu dans les classes sont utiles pour une transition en douceur.

9
répondu codedme 2013-07-24 10:36:15

Celui - ci est assez simple à partir de w3schools: https://www.w3schools.com/bootstrap/bootstrap_ref_js_tab.asp

// Select tab by name
$('.nav-tabs a[href="#home"]').tab('show')

// Select first tab
$('.nav-tabs a:first').tab('show') 

// Select last tab
$('.nav-tabs a:last').tab('show') 

// Select fourth tab (zero-based)
$('.nav-tabs li:eq(3) a').tab('show')
8
répondu Amine Boulaajaj 2017-05-03 19:07:48

Pourquoi ne pas sélectionner l'onglet actif d'abord puis activer le contenu de l'onglet sélectionné ?
1. Ajoutez d'abord la classe 'active' à l'élément De tab .
2. ensuite, utilisez la classe set 'active' sur div sélectionné.

    $(document).ready( function(){
        SelectTab(1); //or use other method  to set active class to tab
        ShowInitialTabContent();

    });
    function SelectTab(tabindex)
    {
        $('.nav-tabs li ').removeClass('active');
        $('.nav-tabs li').eq(tabindex).addClass('active'); 
        //tabindex start at 0 
    }
    function FindActiveDiv()
    {  
        var DivName = $('.nav-tabs .active a').attr('href');  
        return DivName;
    }
    function RemoveFocusNonActive()
    {
        $('.nav-tabs  a').not('.active').blur();  
        //to >  remove  :hover :focus;
    }
    function ShowInitialTabContent()
    {
        RemoveFocusNonActive();
        var DivName = FindActiveDiv();
        if (DivName)
        {
            $(DivName).addClass('active'); 
        } 
    }
0
répondu Kanit P. 2017-11-16 09:26:34

Ajoute un attribut id à une balise html

<ul class="nav nav-tabs">
    <li><a href="#aaa" data-toggle="tab" id="tab_aaa">AAA</a></li>
    <li><a href="#bbb" data-toggle="tab" id="tab_bbb">BBB</a></li>
    <li><a href="#ccc" data-toggle="tab" id="tab_ccc">CCC</a></li>
</ul>
<div class="tab-content" id="tabs">
    <div class="tab-pane" id="aaa">...Content...</div>
    <div class="tab-pane" id="bbb">...Content...</div>
    <div class="tab-pane" id="ccc">...Content...</div>
</div>

Puis en utilisant JQuery

$("#tab_aaa").tab('show');
0
répondu Dmytro Goncharuk 2018-08-09 09:52:48