Ich benutze Twitter Bootstrap und seine "Tabs".
Ich habe folgenden Code:
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#add">add</a></li>
<li><a data-toggle="tab" href="#edit" >edit</a></li>
<li><a data-toggle="tab" href="#delete" >delete</a></li>
</ul>
Die Registerkarten funktionieren ordnungsgemäß, aber in der URL wird nicht #add, #edit, #delete hinzugefügt.
Wenn ich data-toggle
die URL-Änderungen entferne , funktionieren die Registerkarten jedoch nicht.
Irgendwelche Lösungen dafür?
jquery
twitter-bootstrap
Ivanka Todorova
quelle
quelle
Antworten:
Versuchen Sie diesen Code. Es fügt Tab href zu URL hinzu + öffnet Tab basierend auf Hash beim Laden der Seite:
quelle
&&
bedeutetAND
also, wenn die linke davon wahr ist (hash
nicht 0, null oder leer) und die rechte gleich wahr ist, dann tun Sie etwas, aber die Zeile endet mit a,;
so dass vorher nichts zu tun ist;
und es keine Rolle spielt, ob a Die Registerkarte wird angezeigt oder nicht und es spielt keine Rolle, was.tab('show')
zurückgegeben wird. Es wird weiterhin versucht. Wenn bei der Auswertung der Logik auf diese Weise der erste Teil der Gleichung (vorher&&
) falsch ist, muss die Auswertung nicht fortgesetzt werden, sodass die Registerkarte nicht angezeigt wird. Sie könnten den gleichen Effekt wieif(hash){ $('ul.nav a[href="' + hash + '"]').tab('show'); }
a && b;
bedeutet versuchena
und dann nur, wenn es wahr ist, versuchenb
. Zeichenfolgen sind wahr, wenn sie nicht leer sind.Für eine Komplettlösung sind drei Komponenten erforderlich:
Ich denke, keiner der Kommentare hier oder die akzeptierte Antwort behandeln all diese Szenarien.
Da es einiges zu tun gibt, denke ich, dass es als kleines jQuery-Plugin am besten ist: https://github.com/aidanlister/jquery-stickytabs
Sie können das Plugin folgendermaßen aufrufen:
Ich habe dafür einen Blog-Beitrag verfasst: http://aidanlister.com/2014/03/persisting-the-tab-state-in-bootstrap/
quelle
Using
data-toggle="tab"
fordert das Plugin auf, die Registerkarten zu behandeln, die dabeipreventDefault
das Ereignis aufrufen ( Code auf Github ).Sie können Ihre eigene Tab-Aktivierung verwenden und das Ereignis durchlaufen lassen:
Und Sie müssen das Attribut entfernen
data-toggle="tab"
Prüfen das Dokument, wenn Sie Zweifel haben.
quelle
Da Ihre Ankerelemente den URL-Hash bereits ändern, ist das Abhören des Onhashchange- Ereignisses eine weitere gute Option. Wie bereits erwähnt, funktioniert diese Methode gut mit der Zurück-Schaltfläche des Browsers.
Wenn Sie das Ereignis direkt nach dem Definieren des Listeners auslösen, wird beim Laden der Seite auch die rechte Registerkarte angezeigt.
quelle
Meine Lösung für Ihr Problem:
Fügen Sie
data-value
zunächst jedema
Link ein neues Attribut hinzu :Zweitens ändern Sie die IDs von Registerkarten, z. B. von
add
bistab-add
, und aktualisieren Sie die hrefs mit demtab-
Präfix:Und schließlich js Code:
Hier ist jsFiddle - aber es funktioniert nicht wegen des von jsFiddle verwendeten Iframes, aber Sie können die Quelle meiner Lösung lesen.
quelle
Das gleiche Problem mit CakePHP mit Bootstrap 3-Registerkarten. Wenn ich mit einer externen URL und einem Anker sende, springt es zu dem Abschnitt, der mein Menü verliert, nachdem viele Lösungen dies überprüft haben ...
danke an: http://ck.kennt-wayne.de/2012/dec/twitter-bootstrap-how-to-fix-tabs
quelle
Es gibt auch eine einfache Möglichkeit, auf Hash-Änderungen zu reagieren (z. B. Zurück-Schaltfläche). Fügen Sie der tomaszbak-Lösung einfach einen Listener für Hashchange-Ereignisse hinzu:
quelle
Ich verwende Bootstrap 3.3. * Und keine der oben genannten Lösungen hat mir geholfen, auch nicht als Antwort 1 markiert. Ich habe gerade unten Skript hinzugefügt und gearbeitet.
Hoffe das hilft dir.
quelle
Am einfachsten, vorausgesetzt, Sie verwenden die hier
data-toggle="tab"
beschriebene dokumentierte Syntax :quelle
Wenn Sie Ruby on Rails oder ein anderes serverseitiges Skript verwenden, sollten Sie die
anchor
Option für Pfade verwenden. Dies liegt daran, dass nach dem Laden der Seite der URL-Hash nicht mehr verfügbar ist. Sie möchten den richtigen Tab über Ihren Link oder Ihre Formularübermittlung angeben.Wenn Sie ein Präfix verwenden, um zu verhindern, dass das Fenster zur ID springt:
Dann hast du CoffeeScript:
Oder JavaScript:
Dies sollte in Bootstrap 3 funktionieren.
quelle
Danke an @tomaszbak für die ursprüngliche Lösung. Da meine Änderungen jedoch abgelehnt wurden und ich seinen Beitrag noch nicht kommentieren kann, werde ich meine leicht verbesserte und besser lesbare Version hier .
Es macht im Grunde das gleiche, aber wenn das Cross-Browser-Kompatibilitätsproblem behoben ist, das ich mit seinem hatte.
quelle
Hier ist eine Option, mit
history.pushState
der Sie Ihren Browserverlauf verwenden können, um zu einer vorherigen Registerkarte zurückzukehrenquelle
Keiner der oben genannten Punkte hat für mich funktioniert. Hier ist also, wie ich meinen zum Laufen gebracht habe:
class="tab-link"
allen Links hinzu, die diese Funktionalität benötigenquelle
Ich habe verstanden, dass OP die Verwendung von JQuery sagte, aber Sie können einfach Vanilla JS verwenden, um dies zu tun:
quelle
Dies behebt auch eine extrem undurchsichtige Registerkarte, die bei Verwendung von jquery und bootstrap nicht ausgelöst wird
quelle