Używam Twitter Bootstrap i jego „zakładek”.
Mam następujący kod:
<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>
Karty działają poprawnie, ale w adresie URL nie jest dodawany #add, #edit, #delete.
Kiedy data-toggle
usuwam zmiany adresu URL, ale karty nie działają.
Jakieś rozwiązania?
jquery
twitter-bootstrap
Ivanka Todorova
źródło
źródło
Odpowiedzi:
Wypróbuj ten kod. Dodaje tab href do url + otwiera kartę na podstawie skrótu po załadowaniu strony:
źródło
&&
oznaczaAND
więc, że jeśli lewa strona to prawda (hash
nie jest 0, zero lub pusta), a prawa równa się prawdzie, zrób coś, jednak linia kończy się na,;
więc nie ma nic do zrobienia wcześniej;
i nie ma znaczenia, czy Karta jest wyświetlana lub nie i nie ma znaczenia, co.tab('show')
zwróci, nadal będzie próbować. Podczas obliczania logiki w ten sposób, jeśli pierwsza część równania (przed&&
) jest fałszywa, nie ma potrzeby dalszego oceniania, więc karta nie zostanie wyświetlona. Możesz osiągnąć ten sam efekt w następujący sposób:if(hash){ $('ul.nav a[href="' + hash + '"]').tab('show'); }
a && b;
oznacza spróbowaća
i tylko wtedy, gdy jest to prawda, spróbujb
. Ciągi znaków są prawdziwe, jeśli nie są puste.Kompletne rozwiązanie wymaga trzech elementów:
Nie sądzę, aby którykolwiek z poniższych komentarzy ani zaakceptowana odpowiedź dotyczyły wszystkich tych scenariuszy.
Ponieważ jest trochę w to zaangażowany, myślę, że jest najładniejszy jako mała wtyczka jQuery: https://github.com/aidanlister/jquery-stickytabs
Możesz zadzwonić do wtyczki w następujący sposób:
Napisałem w tym celu wpis na blogu, http://aidanlister.com/2014/03/persisting-the-tab-state-in-bootstrap/
źródło
Użycie
data-toggle="tab"
prosi wtyczkę o obsługę zakładek, która podczas wykonywania wywołujepreventDefault
zdarzenie ( kod na github ).Możesz użyć własnej aktywacji karty i pozwolić wydarzeniu przejść:
Musisz usunąć atrybut
data-toggle="tab"
Sprawdź dokument, jeśli masz wątpliwości.
źródło
Ponieważ elementy zakotwiczenia już zmieniają skrót adresu URL, kolejną dobrą opcją jest nasłuchiwanie zdarzenia onhashchange . Jak już wspomniałem @flori, ta metoda działa dobrze z przyciskiem Wstecz przeglądarki.
Wreszcie, wyzwolenie zdarzenia zaraz po zdefiniowaniu odbiornika pomoże również wyświetlić odpowiednią kartę podczas ładowania strony.
źródło
Moje rozwiązanie twojego problemu:
Najpierw dodaj nowy
data-value
atrybut do każdegoa
linku, na przykład:Po drugie, zmień identyfikatory zakładek, np. Z
add
natab-add
, zaktualizuj także href, aby zawierałytab-
przedrostek:I na koniec kod js:
Oto jsFiddle - ale nie działa z powodu iframe używanego przez jsFiddle, ale możesz przeczytać źródło mojego rozwiązania.
źródło
Ten sam problem z CakePHP z zakładkami Bootstrap 3, a kiedy wysyłam z zewnętrznym adresem URL i kotwicą, przeskakuje do sekcji tracącej menu, po przejrzeniu wielu rozwiązań sprawiło, że ...
dzięki: http://ck.kennt-wayne.de/2012/dec/twitter-bootstrap-how-to-fix-tabs
źródło
Istnieje również prosty sposób reagowania na zmiany skrótu (np. Przycisk Wstecz). Po prostu dodaj detektor zdarzeń hashchange do rozwiązania tomaszbak:
źródło
Używam Bootstrap 3.3. * I żadne z powyższych rozwiązań mi nie pomogło, nawet oznaczone jako odpowiedź. Właśnie dodałem poniższy skrypt i działałem.
Mam nadzieję, że to ci pomoże.
źródło
Najprostsze, zakładając, że używasz udokumentowanej
data-toggle="tab"
składni opisanej tutaj :źródło
Dla tych, którzy używają Ruby on Rails lub jakiegokolwiek innego skryptu po stronie serwera, będziesz chciał użyć
anchor
opcji na ścieżkach. Dzieje się tak, ponieważ po załadowaniu strony nie ma dostępnego skrótu adresu URL. Będziesz chciał podać właściwą kartę za pośrednictwem łącza lub przesłanego formularza.Jeśli używasz prefiksu, aby zapobiec przeskakiwaniu okna do id:
Następnie CoffeeScript:
Lub JavaScript:
To powinno działać w Bootstrap 3.
źródło
Dzięki @tomaszbak za oryginalne rozwiązanie, jednak ponieważ moje zmiany zostały odrzucone i nie mogę komentować jego postu, zostawię tutaj moją nieco poprawioną i bardziej czytelną wersję.
Zasadniczo robi to samo, ale jeśli rozwiązuje problem ze zgodnością z różnymi przeglądarkami, który miałem z jego.
źródło
Oto opcja za pomocą,
history.pushState
dzięki której możesz użyć historii przeglądarki, aby wrócić do poprzedniej kartyźródło
Żadne z powyższych nie działało dla mnie, więc oto mój sposób, w jaki mój działa:
class="tab-link"
do wszystkich łączy, które wymagają tej funkcjiźródło
Zrozumiałem, że OP powiedział, że używa JQuery, ale możesz po prostu użyć vanilla JS, aby to zrobić:
źródło
Naprawia to również bardzo mało znaną kartę a href, która nie jest uruchamiana podczas używania jquery i bootstrap
źródło