2016-09-05 2 views
1

zu Springen Ich verwende:Halte aktuelle Bootstrap Register aktiv nach Neuladen der Seite, ohne in meinem app Bootstrap Pillen ersten zwischen

<div class="container"> 
    <ul class="nav nav-pills"> 
    <li class="active"><a data-target="#home" data-toggle="tab">Home</a></li> 
    <li><a href="#about" data-toggle="tab">About</a></li> 
    <li><a href="#contacts" data-toggle="tab">Contacts</a></li> 
    </ul> 
</div> 

<div class="tab-content"> 
    <div class="tab-pane active" id="home">Home</div> 
    <div class="tab-pane" id="about">About</div> 
    <div class="tab-pane" id="contacts">Contacts</div> 
</div> 

Um auf dem gleichen Registerkarte nach Neuladen der Seite ich die folgenden Funktion verwenden, um zu bleiben :

$(function() { 
    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { 
    localStorage.setItem('lastTab', $(this).attr('href')); 
    }); 
    var lastTab = localStorage.getItem('lastTab'); 
    if (lastTab) { 
    $('[href="' + lastTab + '"]').tab('show'); 
    } 
}); 

das Problem besteht darin, dass für 1 Sekunde aktiv das erste Register wird nach dem Neuladen der Seite, und dann springt er auf die eigentlichen aktiven Register. Kann ich den aktuellen Tab ohne dieses "Springen" beibehalten?

+0

Entweder verstecken Laschen, bis Sie entscheiden, welche zu zeigen, oder Inline-Skript schreiben, für 'active' Klasse. Ein weiterer Ansatz wäre, die 'active' Klasse vor dem Laden eines anderen Skripts zu setzen, so dass Sie nicht eine Sekunde warten müssen, es wird schnell erledigt. – skobaljic

+0

Ich denke im aktuellen Zustand - Sie können nicht - Sie rendern Ihre Pillen in verschiedenen Zustand und dann schalten Sie es über Javascript - Sie sollten den Zustand der aktiven Pille in Server-Seite oder verstecken alles unter einer Art von Loader (UX), bevor es wechseln zur richtigen Pille/Tab – mrmnmly

Antwort

1

Die Antwort, wie ABC so einfach ist.

Ich brauche nur Klasse entfernen = „aktiv“ vom ersten <li></li> tag:

<li><a data-target="#home" data-toggle="tab">Home</a></li> 
+0

Mit diesem wenn ein Benutzer zum ersten Mal kommt, wird keine Registerkarte geöffnet sein. – shazyriver

1

Diese Zeile:

$('[href="' + lastTab + '"]').tab('show'); 

muss geändert werden:

$('[data-target="' + lastTab + '"]').tab('show'); 

Sie können nicht auf href sondern auf Daten-Ziel verweisen.

Das gleiche gilt für: localStorage.setItem .....

Der Festcode (jsfiddle):

$(function() { 
    var lastTab = localStorage.getItem('lastTab'); 
    $('.container, .tab-content').removeClass('hidden'); 
    if (lastTab) { 
    $('[data-target="' + lastTab + '"]').tab('show'); 
    } 
    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { 
    localStorage.setItem('lastTab', $(this).data('target')); 
    }); 
}); 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
    <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 

<div class="container hidden"> 
    <ul class="nav nav-pills"> 
     <li><a data-target="#home" data-toggle="tab">Home</a></li> 
     <li><a data-target="#about" data-toggle="tab">About</a></li> 
     <li><a data-target="#contacts" data-toggle="tab">Contacts</a></li> 
    </ul> 
</div> 

<div class="tab-content hidden"> 
    <div class="tab-pane" id="home">Home</div> 
    <div class="tab-pane" id="about">About</div> 
    <div class="tab-pane" id="contacts">Contacts</div> 
</div> 
+0

Mein Fehler, ich bemerkte gerade, dass mein Code '' 'href''' anstelle von' '' data-target''' in allen '' '' '-Tags hatte (siehe zu meinem bearbeiten Frage, sehr leid). Also änderte ich sie und benutzte Ihren festen Code, aber das Problem ist immer noch das gleiche: Die erste Registerkarte wird für 1 Sekunde aktiv und nur dann die benötigte Registerkarte – Zelenka

+0

@Zelenka Sie können versteckte Klasse hinzufügen und so Ihre js wie in meinem Snippet reorganisieren. Gib mir Bescheid. – gaetanoM

+0

Ich habe unten eine Antwort auf diese Frage hinzugefügt. Vielen Dank für Ihre Zeit! – Zelenka

Verwandte Themen