Ich verwende derzeit Registerkarten mit Twitter Bootstrap und möchte dieselbe Registerkarte auswählen, nachdem ein Benutzer Daten gepostet und die Seite neu geladen hat.
Wie wird das gemacht?
Mein aktueller Aufruf, die Registerkarten zu öffnen, sieht folgendermaßen aus:
<script type="text/javascript">
$(document).ready(function() {
$('#profileTabs a:first').tab('show');
});
</script>
Meine Tabs:
<ul id="profileTabs" class="nav nav-tabs">
<li class="active"><a href="#profile" data-toggle="tab">Profile</a></li>
<li><a href="#about" data-toggle="tab">About Me</a></li>
<li><a href="#match" data-toggle="tab">My Match</a></li>
</ul>
Antworten:
Sie müssen localStorage oder Cookies verwenden, um dies zu verwalten. Hier ist eine schnelle und schmutzige Lösung, die erheblich verbessert werden kann, aber möglicherweise einen Ausgangspunkt bietet:
quelle
$(this).attr('href')
statt der$(e.target).attr('id')
gibt Ihnen den Hash ohne die vollständige URL. Sie müssen auch das.tab()
auf das a-Tag mitdata-toggle="tab"
anstelle von anwenden$('#'+lastTab)
. Siehe auch: stackoverflow.com/questions/16808205/…shown
scheint nicht mehr zu funktionieren und musste geändert werdenshown.bs.tab
. Hinweis: Ich verstehe Javascript et al. Ebenso gut wie Wirtschaftswissenschaften. Wenn Sie also wissen, was los ist, können Sie mich gerne korrigieren.Damit funktioniert dies mithilfe von Cookies und das Entfernen der 'aktiven' Klasse aus allen anderen Registerkarten und Registerkartenfenstern ... und das Hinzufügen der 'aktiven' Klasse zum aktuellen Registerkarten- und Registerkartenbereich.
Ich bin sicher, es gibt einen besseren Weg, dies zu tun, aber dies scheint in diesem Fall zu funktionieren.
Benötigt das jQuery-Cookie-Plugin.
quelle
Alle anderen Antworten sind richtig. Diese Antwort berücksichtigt die Tatsache, dass man mehrere
ul.nav.nav-pills
oder haben könnteul.nav.nav-tabs
dieselbe Seite hat. In diesem Fall schlagen die vorherigen Antworten fehl.localStorage
Wird immer noch verwendet, jedoch mit einem StringJSON
als Wert. Hier ist der Code:Dieses Bit kann für die gesamte App auf allen Seiten verwendet werden und funktioniert sowohl für Registerkarten als auch für Pillen. Auch stellen Sie sicher , die Laschen oder Pillen sind nicht standardmäßig aktiv , sonst werden Sie einen Flicker - Effekt auf Laden der Seite sehen.
Wichtig : Stellen Sie sicher, dass der Elternteil
ul
eine ID hat. Danke Alainquelle
Verwenden Sie für die beste Option diese Technik:
quelle
Ich bevorzuge es, die ausgewählte Registerkarte im Hashwert des Fensters zu speichern. Dies ermöglicht auch das Senden von Links an Kollegen, die dann "dieselbe" Seite sehen. Der Trick besteht darin, den Hash der Position zu ändern, wenn eine andere Registerkarte ausgewählt wird. Wenn Sie auf Ihrer Seite bereits # verwenden, muss möglicherweise das Hash-Tag aufgeteilt werden. In meiner App verwende ich ":" als Hashwerttrennzeichen.
quelle
<asp:LinkButton CssClass="form-search" ID="LinkButtonSearch" runat="server">Search</asp:LinkButton>
auf die Schaltfläche geklickt habe, ist es die Standardregisterkarte, die aktiv wird, nicht die aktuelle Registerkarte. Wie kann ich das beheben?Um zu verhindern, dass die Seite auf der ersten Registerkarte und dann auf der Registerkarte, die vom Cookie gespeichert wurde, blinkt (dies tritt auf, wenn Sie die Klasse "aktiv" standardmäßig in der ersten Registerkarte festlegen).
Entfernen Sie die Klasse "aktiv" von Registerkarten und Fenstern wie:
Fügen Sie das folgende Skript ein, um die erste Registerkarte als Standard festzulegen (Erfordert das jQuery-Cookie-Plugin).
quelle
Willst du einen Fading-Effekt? Aktualisierte Version von @ Oktavs Code:
class="tab-pane fade"
Code:
quelle
Ich hatte Registerkarten auf mehreren Seiten und localStorage behält lastTab auch von vorherigen Seiten bei. Da also lastTab der vorherigen Seite gespeichert war, wurde hier keine passende Registerkarte gefunden, sodass nichts angezeigt wurde. Ich habe es so modifiziert.
edit: Mir ist aufgefallen, dass ich
lastTab
für verschiedene Seiten unterschiedliche Variablennamen haben muss , sonst überschreiben sie sich immer gegenseitig. zBlastTab_klanten
,lastTab_bestellingen
usw. für zwei unterschiedliche Seitenklanten
und diebestellingen
beide in tabs angezeigten Daten.quelle
Ich habe dafür gesorgt, dass es mit einer ähnlichen Lösung wie @dgabriel funktioniert. In diesem Fall werden die Links
<a>
nicht benötigtid
. Es wird die aktuelle Registerkarte anhand der Position identifiziert.quelle
indexTab
zweimal benannt, ist aber ein Unterschied. Index. Also werde ich den 2. anrufenlastIndexTab
. In Bezug aufshown
ist dies ein Ereignis, das erst ausgelöst wird, wenn Sie einen Tab öffnen. Es spielt also keine Rolle, ob es vorher istgetItem
.Ich schlage folgende Änderungen vor
Verwenden Sie ein Plugin wie amplify.store , das eine Crossbrowser / Crossplatform Localstorage-API mit integrierten Fallbacks bereitstellt.
Richten Sie die Registerkarte, die gespeichert werden soll, wie
$('#div a[data-toggle="tab"]')
folgt aus, um diese Funktionalität auf mehrere Registerkartencontainer zu erweitern, die auf derselben Seite vorhanden sind.Verwenden Sie eine eindeutige Kennung
(url ??)
, um die zuletzt verwendeten Registerkarten auf mehreren Seiten zu speichern und wiederherzustellen.quelle
Einfache Lösung ohne lokalen Speicher:
quelle
Serverseitiger Ansatz. Stellen Sie sicher, dass alle HTML-Elemente class = "" haben, falls nichts angegeben ist. Andernfalls müssen Sie mit Nullen umgehen.
quelle
Wenn Sie die erste Registerkarte beim ersten Aufrufen der Seite anzeigen möchten, verwenden Sie diesen Code:
quelle
Hier ist ein Ausschnitt, den ich erstellt habe und der mit Bootstrap 3 und jQuery sowie mit verschiedenen URLs mit unterschiedlichen Registerkarten funktioniert . Es werden zwar nicht mehrere Registerkarten pro Seite unterstützt , es sollte jedoch eine einfache Änderung sein, wenn Sie diese Funktion benötigen.
quelle
$ (Dokument) .ready (Funktion () {
});
quelle
Wenn Sie mehr als eine Registerkarte auf der Seite haben, können Sie den folgenden Code verwenden
quelle
Dadurch werden die Registerkarten aktualisiert, jedoch erst, nachdem alles im Controller geladen wurde.
quelle
Ich benutze dies mit MVC:
JavaScript-Bereich:
HTML-Bereich:
quelle