Mam mniej więcej standardową nawigację z bootstrap 3
<body data-spy="scroll" data-target=".navbar-collapse">
<!-- ---------- Navigation ---------- -->
<div class="navbar navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
</button>
<a class="navbar-brand" href="index.html"> <img src="#"></a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li class="active"><a href="#home">Home</a></li>
<li><a href="#one">One</a></li>
<li><a href="#two">Two</a></li>
<li><a href="#three">Three</a></li>
<li><a href="#four">Four</a></li>
</ul>
</div>
</div>
</div>
Zwykle zapada się na mniejszych urządzeniach. Kliknięcie przycisku menu powoduje rozwinięcie menu, ale jeśli kliknę (lub dotknę w tym przypadku) łącze menu, menu pozostanie otwarte. Co mam zrobić, aby ponownie je zamknąć?
html
css
twitter-bootstrap
navigation
Paranoja
źródło
źródło
Odpowiedzi:
Domyślnym ustawieniem Bootstrap jest pozostawienie otwartego menu po kliknięciu elementu menu. Możesz ręcznie zastąpić to zachowanie, wywołując
.collapse('hide');
element jQuery, który chcesz zwinąć.źródło
Aby podzielić się tym z rozwiązań na GitHub, oto popularna odpowiedź:
https://github.com/twbs/bootstrap/issues/9013#issuecomment-39698247
Jest to połączone z dokumentem, więc nie musisz tego robić w ready () (możesz dynamicznie dołączać linki do swojego menu i nadal będzie działać), a wywoływane jest tylko wtedy, gdy menu jest już rozwinięte. Niektórzy ludzie zgłaszali dziwne flashowanie w miejscu, w którym menu otwiera się, a następnie natychmiast zamyka innym kodem, który nie weryfikował, czy menu zawiera klasę „in”.
[UPDATE 2014-11-04] najwyraźniej podczas korzystania z podmenu powyższe może powodować problemy, więc powyższe zostało zmodyfikowane do:
źródło
collapse
jest to metoda zdefiniowana przez bootstrap i dołączona do obiektu jQuery ... prawdopodobnie ponownie używają tego do wielu celów (akordeon, pasek nawigacyjny itp.): Getbootstrap.com/javascript / # collapse-useZmień to:
do tego:
Ta prosta zmiana zadziałała dla mnie.
Ref: https://github.com/twbs/bootstrap/issues/9013
źródło
.in
do końcadata-target
wartości:data-target=".navbar-collapse.in"
. Z komentarza w tej odpowiedzi: stackoverflow.com/a/21797534/89818Miałem ten sam problem, ale spowodowany przez dołączenie dwukrotnie
bootstrap.js
ijquery.js
plików.Za jednym kliknięciem zdarzenie zostało przetworzone dwukrotnie przez obie instancje jquery. Jeden zamknięty, a drugi otwarty.
źródło
Pomogłoby to w obsłudze menu rozwijanego na pasku nawigacyjnym
źródło
Mam / miałem podobne problemy z Bootstrap 4, alpha-6, a powyższa odpowiedź Joakima Johanssona poprowadziła mnie w dobrym kierunku. Nie wymaga javascript. Umieszczenie data-target = ". Navbar-collapse" i data-toggle = "collapse" w znaczniku DIV wewnątrz elementu nawigacyjnego, ale otaczającego linki / przyciski, działało dla mnie.
źródło
Wiem, że to pytanie dotyczy Bootstrap 3, ale jeśli szukasz rozwiązania dla Bootstrap 4 , po prostu zrób to:
źródło
$(".navbar-nav li a:not('.dropdown-toggle')") .on('click', function () { $('.navbar-collapse').collapse('hide'); }
Miałem ten sam problem, używałem
jQuery-1.7.1
ibootstrap 3.2.0
. Zmieniłem moją wersję jQuery na najnowszą (jquery-1.11.2
) wersję i wszystko działa dobrze.źródło
Zrobiłem
źródło
Chociaż rozwiązanie opublikowane wcześniej, aby zmienić samą pozycję menu, jak poniżej, działa, gdy menu znajduje się na małym urządzeniu, ma efekt uboczny, gdy menu jest na pełnej szerokości i rozwinięte, może to spowodować przesuwanie się poziomego paska przewijania po pozycje menu . Rozwiązania javascript nie mają tego efektu ubocznego.
(przepraszam, że odpowiadam w ten sposób, chciałem dodać komentarz do tej odpowiedzi, ale wydaje mi się, że nie mam wystarczającego uznania, aby zgłosić uwagi)
źródło
źródło
Jeśli chcesz ręcznie zmienić to zachowanie, wywołując .collapse ('hide') w dyrektywie kątowej, oto kod:
plik javascript:
HTML:
źródło
Upewnij się, że używasz najnowszej wersji bootstrap js. Miałem ten sam problem i po prostu uaktualnienie pliku bootstrap.js z bootstrap-3.3.6 zrobiło magię.
źródło
Jeśli chcesz, aby nawigacja przełączała się tylko wtedy, gdy jest używana na ekranie telefonu komórkowego, po prostu dodaj
data-toggle="collapse"
idata-target="#navbar"
do elementów a będzie działać na ekranie urządzenia mobilnego, ale po kliknięciu na ekranie komputera spowoduje dziwne migotanie. Rozwiązania jQuery nie działają dobrze, jeśli jesteś w środowisku Aurelia lub Angular.Najlepszym rozwiązaniem dla mnie było utworzenie atrybutu niestandardowego, który nasłuchuje odpowiedniego zapytania o media i w
data-toggle="collapse"
razie potrzeby dodaje atrybut:<a href="#" ... collapse-toggle-if-less768 data-target="#navbar"> ...
Atrybut niestandardowy z Aurelia wygląda następująco:
źródło
Odkryłem, że po wielu zmaganiach, próbach i błędach, najlepsze rozwiązanie dla mnie na jsfiddle. Link do inspiracji na jsfiddle.net . Używam navbar-fixed-top programu bootstrap z funkcją zwijania i przełączania hamburgera. Oto moja wersja na jsfiddle: jsfiddle Scrollspy navbar . Uzyskiwałem tylko podstawową funkcjonalność, korzystając z instrukcji na getbootsrap.com. Dla mnie problem tkwił głównie w niejasnych kierunkach i js zalecanych przez witrynę getbootstrap. Najlepsze było to, że dodanie tego dodatkowego fragmentu js (który zawiera niektóre elementy wymienione w powyższych wątkach) rozwiązało kilka problemów związanych ze Scrollspy, w tym:
UWAGA: W kodzie js pokazanym poniżej (z drugiego linku jsfiddle w moim poście):
topMenu = $ ("# myScrollspy"),
... wartość „myScrollspy” musi odpowiadać jej id = „” w kodzie HTML, tak jak to jest ...
Oczywiście możesz zmienić tę wartość na dowolną wartość.
źródło
Wszystko, czego potrzebujesz, to data-target = ". Navbar-collapse" w przycisku, nic więcej.
źródło
<a/>
ale nie działa<NavLink/>
, załamuje się, ale już<NavLink/>
nie działa, jakieś pomysły dlaczego?Oto kod, który zadziałał dla mnie:
źródło
Miałem ten sam problem, upewnij się, że plik bootstrap.js znajduje się na twojej stronie html. W moim przypadku menu otworzyło się, ale się nie zamknęło. Jak tylko dołączyłem plik js bootstrap, wszystko po prostu działało.
źródło
Prosty Spróbuj utworzyć funkcję w javascript dla rozwijanej klasy zwijania.
Przykład:
JS :
Połącz tę funkcję z
onClick
prostymi pracami dla mnie.źródło
Miałem podobny problem, ale mój nie pozostawał otwarty, otwierał / zamykał się szybko. Odkryłem, że ładowałem jquery-1.11.1.min.js przed bootstrap.min.js. Więc odwróciłem kolejność tych 2 plików i naprawiłem moje menu. Działa teraz bez zarzutu. Mam nadzieję, że to pomoże
źródło
Problem może polegać na tym, że używasz nieaktualnych wersji bootstrap lub jquery, LUB wywołujesz więcej niż jedną wersję w swoim znaczniku.
Po prostu zachowaj najnowsze wersje, potrzebujesz tylko jednego odniesienia. Rozwiązuje problem.
źródło
możesz po prostu upewnić się, że ładujesz swoje pliki ATF jQuery i Bootstrap.min.js. Twoja nawigacja jest pierwszą rzeczą do renderowania na stronie, więc jeśli masz skrypty na dole kodu HTML, tracisz wszelkie funkcje JavaScript.
źródło
Miałem ten sam problem tylko na telefonie komórkowym, ale w aplikacji Angular i tak właśnie zrobiłem:
app.component.html
app.component.ts
Mam nadzieję, że to pomoże :)
źródło
Moje menu nie jest standardowe w pasku nawigacyjnym, ale udało mi się automatycznie zwinąć moje, używając funkcji „onclick” i „.click ()”.
źródło