Twitter Bootstrap Nav ausblenden beim Klicken ausblenden

133

Dies ist kein Dropdown-Menü, die Kategorie ist Klasse li wie im Bild:

Geben Sie hier die Bildbeschreibung ein

Durch Auswahl einer Kategorie aus dem Antwortmenü (die Vorlage ist nur eine Seite) möchte ich den Navigationskollaps beim Klicken automatisch ausblenden. Bummeln Sie auch zur Navigation, da die Vorlage nur eine Seite hat. Ich suche eine Lösung, die sich nicht darauf auswirkt. Hier ist der HTML-Code des Menüs:

    <!-- NAVBAR
  ================================================== -->
<div class="navbar navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container">
      <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      </a>
      <a class="brand" href="#">Carousel Demo</a>
      <div class="nav-collapse">
        <ul class="nav" >
          <li class="active"><a href="#home">Home</a></li>
          <li><a href="#about">About</a></li>
          <li><a href="#portfolio">Portfolio</a></li>
          <li><a href="#services">Services</a></li>
          <li><a href="#contact">Contact</a></li>
          <!-- dropdown -->
        </ul>
        <!-- /.nav -->
      </div>
      <!--/.nav-collapse -->
    </div>
    <!-- /.container -->
  </div>
  <!-- /.navbar-inner -->
</div>
<!-- /.navbar -->
Tim Vitor
quelle
und meine lösung funktioniert oder nicht?
WooCaSh
@WooCaSh funktionierte eher die Reihenfolge ihrer Lösung custom.js war falsch, ich bemerkte $ ('nav a'). Ein ('click', function () {und in meinem Fall ist es eine Klasse, dann $ ('. Nav a'). On ('click', function () {. Danke, du hast mir sehr geholfen!
Tim Vitor
Mögliches Duplikat von Close responsive navbar automatisch
chrylis
Wenn Sie nicht versuchen möchten, alle diese Lösungen hier selbst zu vergleichen, sollten Sie die Nummer 1 dieser Antwort bearbeiten .
Caw
Sie können meine Antwort hier sehen stackoverflow.com/questions/14248194/…
Camel

Antworten:

165

Versuche dies:

$('.nav a').on('click', function(){
    $('.btn-navbar').click(); //bootstrap 2.x
    $('.navbar-toggle').click(); //bootstrap 3.x by Richard
    $('.navbar-toggler').click(); //bootstrap 4.x
});
WooCaSh
quelle
1
Das hat super geklappt. Danke WooCaSh. Ich habe auch nur vorgeschlagen, ein "." zum Code vor $ ('nav a') => $ ('. nav a'). [Klassenauswahl fehlte ein Punkt "."]
Clain Dsilva
7
Zu Ihrer Information, das funktioniert nicht in allen Fällen. Wenn die Größe des Fensters geändert wird und das mobile Menü angezeigt wird, ist es standardmäßig geöffnet.
Andrew Boes
8
UPDATE: Die übliche Auswahl für Bootstrap 3 ist .navbar-toggle, also $ (". Navbar-toggle"). Click ();
Richard
41
Dies führt zu Problemen in der Navigationsleiste. Verwenden Sie besser $ ('. Nav -apse'). Collapse ('hide'); beim Klicken auf ein Ereignis, anstatt die Umschalttaste anzuklicken.
Rohan
7
Wenn die Navigationsleiste im "Desktop" -Modus geöffnet ist, flackert oder schließt sie und öffnet sich dann wieder, wenn Sie diese verwenden.
mlapaglia
134

Ich repliziere einfach die 2 Attribute von btn-navbar( data-toggle="collapse" data-target=".nav-collapse.in") auf jedem Link wie folgt:

<div class="nav-collapse">
  <ul class="nav" >
    <li class="active"><a href="#home" data-toggle="collapse" data-target=".nav-collapse.in">Home</a></li>
    <li><a href="#about" data-toggle="collapse" data-target=".nav-collapse.in">About</a></li>
    <li><a href="#portfolio" data-toggle="collapse" data-target=".nav-collapse.in">Portfolio</a></li>
    <li><a href="#services" data-toggle="collapse" data-target=".nav-collapse.in">Services</a></li>
    <li><a href="#contact" data-toggle="collapse" data-target=".nav-collapse.in">Contact</a></li>
  </ul>
</div>

In der Bootstrap 4-Navigationsleiste wurde die Syntax wie folgtin geändert show:

data-toggle="collapse" data-target=".navbar-collapse.show"

Zu1779
quelle
13
Hinzufügen data-toggleund data-targetzu <li> ist eine sauberere Lösung. Vielen Dank.
Trante
9
Funktioniert gut auf Mobilgeräten, führt jedoch dazu, dass die Animation der Navigationsleiste auf dem Desktop zusammenbricht, was unerwünscht ist.
James Brewer
34
@ JamesBrewer Um die Kollapsanimation auf der Desktop-Version zu vermeiden, fügen Sie .indem data-toggle="collapse" data-target=".nav-collapse.in"
Datenziel Folgendes hinzu
23
Vergessen Sie nicht, .nav-Zusammenbruch durch .navbar-Zusammenbruch für Bootstrap 3 zu ersetzen
kuceram
3
Dies sollte die akzeptierte Antwort sein! Vielen Dank für die Veröffentlichung!
Trixtur
60
$(function() {
    $('.nav a').on('click', function(){ 
        if($('.navbar-toggle').css('display') !='none'){
            $('.navbar-toggle').trigger( "click" );
        }
    });
});
user2883298
quelle
6
Dies ist eine bessere Lösung, da es einen Fehler verhindert, wenn Links sichtbar sind.
Bruno Dias
Auf Bootstrap 4 ist es .navbar-toggler. Wie auch immer, super funktionierender Code, danke!
Xdg
45

Verwenden Sie besser die Standardmethoden für Collapse.js ( V3-Dokumente , V4-Dokumente ):

$('.nav a').click(function(){
    $('.nav-collapse').collapse('hide');
});
Vadim P.
quelle
4
Auf jeden Fall besser als mit den Klickfunktionen! Es ist am besten, das Risiko auf ein Minimum zu beschränken, indem Sie nur mit den Dingen interagieren, die Sie ändern möchten. Ein Klickereignis kann dazu führen, dass zusätzliche unerwünschte Funktionen ausgeführt werden. Ich wusste nichts über diese Kollapsmethode, danke.
Andrew
1
Dies ist die beste Lösung, die ich bisher gefunden habe. Danke dir. Nur eine kleine Verbesserung, die ich gemacht habe: Ersetzen Sie den .nav aSelektor durch diesen:.nav a:not(.dropdown-toggle)
Mneute
Für mich, auf meiner Bootstrap 4 Beispielseite, anstatt .nav aich verwenden musste.navbar a
alexandre1985
Meinst du .navbar-collapsenicht und nicht .nav-collapse?
Volomike
Nein, ich nicht, weil .nav-collapseim Fragecodebeispiel verwendet wurde.
Vadim P.
32

Noch eleganter ohne ein bisschen doppelten Code ist es, die Attribute data-toggle="collapse"und einfach data-target=".nav-collapse"auf das Navi selbst anzuwenden :

<nav class="nav-collapse" data-toggle="collapse" data-target=".nav-collapse">
  <ul class="nav">
    <li class="active"><a href="#home">Home</a></li>
    <li><a href="#about">About</a></li>
    <li><a href="#portfolio">Portfolio</a></li>
    <li><a href="#services">Services</a></li>
    <li><a href="#contact">Contact</a></li>
  </ul>
</nav>

Super sauber, kein JavaScript erforderlich. Funktioniert hervorragend, solange Ihre nav aElemente genügend Polsterung für dicke Finger haben und Sie nicht verhindern, dass Klickereignisse über das e.stopPropagation()Klicken von nav aElementen sprudeln .

Purefusion
quelle
1
Dies ist der richtige Bootstrap-Weg, um dieses Verhalten zu erreichen.
ApenasVB
2
Ich würde vorschlagen, das Ziel so zu ändern, dass es auch das In- Class- Ziel enthält . Dadurch wird verhindert, dass sich die Desktop-Versionen merkwürdig verhalten. data-target=".nav-collapse.in"
Dave
Das Schöne daran ist, dass es mit dem RouterLink von Angular 4 funktioniert, während die anderen Lösungen dies nicht tun!
stt106
1
In Bootstrap 4 wäre es<div class="collapse navbar-collapse" data-toggle="collapse" data-target=".navbar-collapse">
JoshJoe
17

Aktualisieren Sie Ihre

<li>
  <a href="#about">About</a>
</li>

zu

<li>
  <a data-toggle="collapse" data-target=".nav-collapse" href="#about">About</a>
</li>

Diese einfache Änderung hat bei mir funktioniert.

Ref: https://github.com/twbs/bootstrap/issues/9013

FullStackDev
quelle
1
Dies sollte die akzeptierte Antwort sein. Funktioniert perfekt mit Standard-Bootstrap-Konventionen.
Bradley
1
Einverstanden. Dies ist der richtige Weg, um dies zu erreichen. Keine Notwendigkeit für jQuery. Ich verstehe nicht, warum dies so wenig Aufsehen erregt hat.
Wahwahwah
Auf einer "Standard" -Visual Studio-Masterseite wird das Burger-Menü ausgeblendet und es werden keine Menüoptionen angezeigt. Diese Antwort funktioniert nur mit einem bestimmten Menükonfigurationslayout (das Sie nicht als Beispiel angeben).
Gone Coding
1
Das würde nicht mehr funktionieren. Verwendung data-target=".navbar-collapse.in"wie beim neuen Bootstrap-Standard. Die .inKlasse soll die Animation auf dem Desktop verhindern
Philip Oghenerobo Balogun 14.
Ich habe diese Lösung in meiner Situation verwendet, aber die ID meines div.navbar-collapseElements als data-targetParameter verwendet.
Maxathousand
13

Die Navigation sollte jedes Mal geschlossen werden, wenn ein Benutzer irgendwo auf den Körper klickt - nicht nur auf Navigationselemente. Angenommen, das Menü ist geöffnet, aber der Benutzer klickt auf den Seitenkörper. Der Benutzer erwartet, dass das Menü geschlossen wird.

Sie müssen auch sicherstellen, dass die Umschalttaste sichtbar ist, da sonst ein Sprung im Menü angezeigt wird.

$(document).ready(function() { 

$("body").click(function(event) {
        // only do this if navigation is visible, otherwise you see jump in navigation while collapse() is called 
         if ($(".navbar-collapse").is(":visible") && $(".navbar-toggle").is(":visible") ) {
            $('.navbar-collapse').collapse('toggle');
        }
  });

});
Charlie Dalsass
quelle
"Elemente gelten als sichtbar, wenn sie Speicherplatz im Dokument belegen." Ihr Code sollte den Zusammenbruch verhindern, wenn der Zusammenbruch der Navigationsleiste auf dem Bildschirm nicht sichtbar ist, dies jedoch nicht.
Steve M
Nicht nur, dass es großartig funktioniert, es ist auch die einzige Lösung, die für mich funktioniert hat, Bootstrap> 3.
AME
13

Getestet auf Bootstrap 3.3.6 - funktioniert!

$('.nav a').click(function () {
    $('.navbar-collapse').collapse('hide');
});

TheAivis
quelle
7

Versuchen Sie dies> Bootstrap 3

Genial genau das, wonach ich gesucht habe, aber ich hatte einige Konflikte mit dem Javascript und dem Bootstrap-Modal, dies hat es behoben.

    $(function() {
    $('.navbar-nav').on('click', function(){ 
        if($('.navbar-header .navbar-toggle').css('display') !='none'){
            $(".navbar-header .navbar-toggle").trigger( "click" );
        }
    });
});

Hoffe das hilft.

Getsomepeaches
quelle
6

Das hat bei mir gut funktioniert. Dies entspricht der akzeptierten Antwort, behebt jedoch das Problem in Bezug auf die Desktop- / Tablet-Ansicht

$('.navbar-nav a').on('click', function () {
        if (window.innerWidth <= 768) {
            $(".navbar-toggle").click();
        }
    });

MichaelMcCabe
quelle
window.innerWidth <= 767 ist besser;) oder window.innerWidth <768
Alex Tape
Dies sollte als Top-Antwort ausgewählt werden. Dies funktioniert jedoch nicht mit Dropdowns. Ich habe es behoben, indem ich den Selektor durch ersetzt habe: $ ('. Navbar-nav'). Find ('a: not (". Dropdown-toggle")')
Erikas
6

$('.nav a').click(function () {
    $('.navbar-collapse').collapse('hide');
});

Jagdish Singh
quelle
Das funktioniert bei mir. Ich habe in jeder Kendo-Ansicht eine Navigationsleiste, daher muss ich sie bei der beforeShowVeranstaltung schließen.
Xinthose
4

Ich denke, es ist besser, die Collapse.js- Standardmethoden von Bootstrap 3 zu verwenden, indem Sie das .navbar-collapseals reduzierbares Element verwenden, das Sie wie unten gezeigt ausblenden möchten.

Andere Lösungen können andere unerwünschte Probleme mit der Anzeige oder Funktion von Elementen auf Ihrer Webseite verursachen. Obwohl einige Lösungen Ihr anfängliches Problem zu beheben scheinen, können andere sehr gut eingeführt werden. Stellen Sie daher sicher, dass Sie Ihre Site nach jeder Korrektur gründlich testen.

So sehen Sie diesen Code in Aktion:

  1. Klicken Sie unten auf "Run This Code Snippet".
  2. Drücken Sie die Taste "Ganzseite".
  3. Fenster skalieren, bis das Dropdown-Menü aktiviert wird.
  4. Dann wählen Sie eine Menüoption und voila!

Prost!

Franciscus Agnew
quelle
Dies ist viel besser als die derzeit akzeptierte Antwort. Mit diesem bekomme ich Geisteranimationen auf dem Desktop.
Cody
3

Geben Sie auf jedem Dropdown-Link data-toggle = "Collapse" und data-target = ". Nav-Collapse" ein, wobei Nav-Collapse der Name ist, den Sie der Dropdown-Liste geben.

<ul class="nav" >
      <li class="active"><a href="#home">Home</a></li>
      <li><a href="#about" data-toggle="collapse" data-target=".nav-collapse">About</a></li>
      <li><a href="#portfolio" data-toggle="collapse" data-target=".nav-collapse">Portfolio</a></li>
      <li><a href="#services" data-toggle="collapse" data-target="nav-collapse">Services</a></li>
      <li><a href="#contact" data-toggle="collapse" data-target=".nav-collapse">Contact</a></li>
      <!-- dropdown -->
  </ul>

Dies funktioniert perfekt auf Bildschirmen, die ein Dropdown-Menü wie mobile Bildschirme haben, aber auf Desktop und Tablet wird ein Flickr erstellt. Dies liegt daran, dass die Klasse .collapsing angewendet wird. Um das flickr zu entfernen, habe ich eine Medienabfrage erstellt und einen Überlauf eingefügt, der für die reduzierende Klasse verborgen ist.

@media (min-width: 768px) {
.collapsing {
    overflow: inherit;
  }
}
Botez Alexandru
quelle
3

Das Hinzufügen von data-toggle = "apse "data-target =". Navbar-collapse.in "zu dem Tag <a>hat bei mir funktioniert.

<div>

        <button type="button" class="navbar-toggle"  data-toggle="collapse" data-target=".navbar-collapse">
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
    </div>
            <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav navbar-right">
                <li class="nav-item"><a
                    href="#" data-toggle="collapse" data-target=".navbar-collapse.in" class="nav-link" >Home
                </a></li>
            </ul>
    </div>
Arv
quelle
2

So habe ich es gemacht. Wenn es einen reibungsloseren Weg gibt, sagen Sie es mir bitte.

In den <a>Tags, in denen sich die Links für das Menü befinden, habe ich diesen Code hinzugefügt:

onclick="$('.navbar-toggle').click()"

Die Folienanimation bleibt erhalten. Bei voller Nutzung würde es also so aussehen:

<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation" ng-controller="topNavController as topNav">
<div class="container">
    <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="home.html">My Cool Site</a>
    </div>
    <div id="navbar" class="navbar-collapse collapse">
        <ul class="nav navbar-nav">
            <li class="active" onclick="$('.navbar-toggle').click()"><a href="home.html" onclick="$('.navbar-toggle').click()"><i class="fa fa-home"></i> Home</a></li>
            <li><a href="aboutus.html" onclick="$('.navbar-toggle').click()">About Us</a></li>
        </ul>
    </div><!--/.nav-collapse -->
</div>

user2502767
quelle
1
$(function() {
    $('.nav a').on('click touchstart', function(){ 
        if($('.navbar-toggle').css('display') !='none'){
            $(".navbar-toggle").trigger( "click" );
        }
    });
});

// HINWEIS Ich habe den "Touchstart" für Mobile Touch hinzugefügt. Touchstart / End hat keine Verzögerung

APOUGHER
quelle
1

Dies ist die beste Lösung, die ich verwendet habe.

$(document).ready(function () {

        $('.nav a').on('click', function () {

            if ($(".btn-navbar").is(":visible") ){ $(".btn-navbar").trigger("click"); } //bootstrap 2.x
            if ($(".navbar-toggle").is(":visible")) { $(".navbar-toggle").trigger("click"); } //bootstrap 3.x
        });

    });
Judson Terrell
quelle
1

Für diejenigen, die bemerkt haben, dass Desktop-Navigationsleisten bei Verwendung dieser Lösung flackern:

$('.nav a').on('click', function(){
    $(".navbar-collapse").collapse('hide');
}); 

Eine einfache Lösung für dieses Problem besteht darin, auf die ausgeblendete Navigationsleiste nur zu verweisen, indem überprüft wird, ob 'in' vorhanden ist:

$('.navbar-collapse .nav a').on('click', function(){
    if($('.navbar-collapse').hasClass('in'))
    {
        $(".navbar-collapse").collapse('hide');
    }
});

Dadurch wird die Navigationsleiste beim Klicken reduziert, wenn sich die Navigationsleiste im mobilen Modus befindet, die Desktop-Version bleibt jedoch in Ruhe. Dies vermeidet das Flackern, das viele Menschen auf Desktop-Versionen gesehen haben.

Wenn Sie eine Navigationsleiste mit Dropdown-Menüs haben, können Sie diese nicht sehen, da die Navigationsleiste ausgeblendet wird, sobald Sie darauf klicken. Wenn Sie also Dropdown-Menüs haben (wie ich!), Verwenden Sie Folgendes:

$('.nav a').on('click', function(e){
    if(!$(this).closest('li').hasClass('dropdown') & $( '.navbar-collapse').hasClass('in'))
    {
        $(".navbar-collapse").collapse('hide');
    }
});

Hierbei wird nach dem Vorhandensein der Dropdown-Klasse über dem im DOM angeklickten Link gesucht. Wenn dieser vorhanden ist, wollte der Link ein Dropdown-Menü starten, sodass das Menü nicht ausgeblendet wird. Wenn Sie im Dropdown-Menü auf einen Link klicken, wird die Navigationsleiste korrekt ausgeblendet.

Einzelperson
quelle
1
$("body,.nav a").click(function (event) {

    // only do this if navigation is visible, otherwise you see jump in
    //navigation while collapse() iS called 
    if ($(".navbar-collapse").is(":visible") && $(".navbar-toggle").is(":visible")) {
    $('.navbar-collapse').collapse('toggle');
  }
});
טאבו ישראל שרות לקוחות
quelle
1

100% arbeiten: -

In HTML hinzufügen

<div id="myMenu" class="nav-collapse">

Javascript

 $(function(){ 
 var navMain = $("#myMenu");
 navMain.on("click", "a", null, function () {
     navMain.collapse('hide');
 });
});
Chit
quelle
0

Dies verbirgt den Zusammenbruch der Navigation, anstatt ihn zu animieren, aber das gleiche Konzept wie oben

JS:

$('.nav a').on('click', function () {
    $("#funk").toggleClass('in collapse');
});

HTML:

<div class="navbar-collapse" id="funk">

Ich bevorzuge dies auf Websites mit nur einer Seite, da ich localScroll.js verwende, das bereits animiert ist.

andreaslarsen.dk
quelle
0

Mobile Ansicht: Ausblenden der Umschaltnavigation in Bootstrap + Dropdown + JQuery + Scrollto mit Navigationselementen, die auf Anker / IDs auf derselben Seite verweisen , eine Seitenvorlage

Das Problem, mit dem ich mit einer der oben genannten Lösungen experimentiert habe, war, dass nur die Untermenüelemente reduziert werden, während das Navigationsmenü nicht reduziert wird.

Also habe ich meine Gedanken gemacht ... und was können wir beobachten? Nun, jedes Mal, wenn wir / die Benutzer auf einen Scrollto-Link klicken, soll die Seite zu dieser Position scrollen und gleichzeitig das Menü reduzieren, um die Seitenansicht wiederherzustellen.

Nun ... warum diesen Job nicht den Scrollto-Funktionen zuweisen? Einfach :-)

Also in den beiden Codes

// scroll to top action
$('.scroll-top').on('click', function(event) {
    event.preventDefault();
    $('html, body').animate({scrollTop:0}, 'slow');

und

// scroll function
function scrollToID(id, speed){
var offSet = 67;
var targetOffset = $(id).offset().top - offSet;
var mainNav = $('#main-nav');
    $('html,body').animate({scrollTop:targetOffset}, speed);
if (mainNav.hasClass("open")) {
    mainNav.css("height", "1px").removeClass("in").addClass("collapse");
    mainNav.removeClass("open");
}

Ich habe gerade den gleichen Befehl in beiden Funktionen hinzugefügt

    if($('.navbar-toggle').css('display') !='none'){
    $(".navbar-toggle").trigger( "click" );
}

(ein großes Lob an einen der oben genannten Mitwirkenden)

so (das gleiche sollte zu beiden Schriftrollen hinzugefügt werden)

$('.scroll-top').on('click', function(event) {
    event.preventDefault();
    $('html, body').animate({scrollTop:0}, 'slow');
if($('.navbar-toggle').css('display') !='none'){
    $(".navbar-toggle").trigger( "click" );
}
});

Wenn du es in Aktion sehen willst, schau es dir einfach bei recupero dati da NAS an

Robert
quelle
0

Bootstrap3-Benutzer versuchen den unten angegebenen Code. Es hat bei mir funktioniert.

function close_toggle() {
   if ($(window).width() <= 768) {
      $('.nav a').on('click', function(){
          $(".navbar-toggle").click();
      });
   }
   else {
     $('.nav a').off('click');
   }
}
close_toggle();

$(window).resize(close_toggle);
Yash Vekaria
quelle
0

Bootstrap legt eine .inKlasse für das Collapse-Element fest, um die Animation auszulösen und zu öffnen. Wenn Sie die .inKlasse einfach entfernen , wird die Animation nicht ausgeführt, sondern das Element wird ausgeblendet - nicht genau das, was Sie möchten.

Es ist wahrscheinlich schneller, eine ifAnweisung auszuführen , um zu überprüfen, ob die Standard-Bootstrap-Klasse .infür das Element festgelegt wurde.

Dieser Code sagt also nur:

wenn mein Element die Klasse hat .in angewendet wurde, schließen Sie sie, indem Sie die Standard-Bootstrap-Animation auslösen. Andernfalls führen Sie die Standard-Bootstrap-Aktion / -Animation zum Öffnen aus

$('#navbar a').on('click touchstart', function() {
    // if .in class is set on element, the element is visible – you want to hide it
    if ($('#navbar').hasClass('in')) {
        // collapse toggle will remove the .in class and animate the element closed 
        $('#navbar').collapse('toggle');
    }
})
CR Rollyson
quelle
0

Fügen Sie dann jedem eine ID hinzu

<li> add data-target="myMenu" data-toggle="collapse"
<div id="myMenu" class="nav-collapse">
    <ul class="nav">
      <li class="active" data-target="myMenu" data-toggle="collapse"><a href="#home">Home</a></li>
      <li data-target="myMenu" data-toggle="collapse"><a href="#about">About</a></li>
      <li data-target="myMenu" data-toggle="collapse"><a href="#portfolio">Portfolio</a></li>
      <li data-target="myMenu" data-toggle="collapse"><a href="#services">Services</a></li>
      <li data-target="myMenu" data-toggle="collapse"><a href="#contact">Contact</a></li>
    </ul>
</div>
James
quelle
0

Eine weitere schnelle Lösung für Bootstrap 3. * könnte sein:

$( document ).ready(function() {
    //
    // Hide collapsed menu on click
    //
    $('.nav a').each(function (idx, obj) {
        var selected = $(obj);

        selected.on('click', function() {
            if (selected.closest('.collapse.in').length > 0) {
                $('.navbar-toggle').click(); //bootstrap 3.x by Richard
            }
        });
    });
});
Cristi Draghici
quelle
0

Ich habe hier eine Lösung veröffentlicht, die mit Aurelia funktioniert: https://stackoverflow.com/a/41465905/6466378

Das Problem ist , man kann nicht einfach addieren data-toggle="collapse"und data-target="#navbar"zu Ihrem einem Elemente. Und jQuery funktioniert nicht, wenn es sich um eine Aurelia- oder Angular-Umgebung handelt.

Die beste Lösung für mich war, ein benutzerdefiniertes Attribut zu erstellen, das die entsprechende Medienabfrage abhört und das data-toggle="collapse"Attribut bei Bedarf hinzufügt :

<a href="#" ... collapse-toggle-if-less768 data-target="#navbar"> ...

Das benutzerdefinierte Attribut mit Aurelia sieht folgendermaßen aus:

import {autoinject} from 'aurelia-framework';

@autoinject
export class CollapseToggleIfLess768CustomAttribute {
  element: Element;

  constructor(element: Element) {
    this.element = element;
    var mql = window.matchMedia("(min-width: 768px)");
    mql.addListener((mediaQueryList: MediaQueryList) => this.handleMediaChange(mediaQueryList));
    this.handleMediaChange(mql);
  }

  handleMediaChange(mediaQueryList: MediaQueryList) {
    if (mediaQueryList.matches) {
      var dataToggle = this.element.attributes.getNamedItem("data-toggle");
      if (dataToggle) {
        this.element.attributes.removeNamedItem("data-toggle");
      }
    } else {
      var dataToggle = this.element.attributes.getNamedItem("data-toggle");
      if (!dataToggle) {
        var dataToggle = document.createAttribute("data-toggle");
        dataToggle.value = "collapse";
        this.element.attributes.setNamedItem(dataToggle);
      }
    }
  }
}

Halllo
quelle
0

Ich bin auf Bootstrap 4, verwende fullPage.js mit einem festen Navigationssystem und habe alles hier Aufgetestete mit gemischten Ergebnissen ausprobiert.

  • Versuchte den besten, sauberen Weg:

    data-toggle="collapse" data-target=".navbar-collapse.show"

    Das Menü würde zusammenbrechen, aber die href-Links würden nirgendwohin führen.

  • Versuchte die logischen anderen Wege:

    $('myClickableElements').on('click touchstart', function(){
      $(".navbar-collapse.show").collapse('hide');
      // or
      $(".navbar-collapse.show").collapse('toggle');
      // or
      $('.navbar-toggler').click()
    });

    Aufgrund des Touchstart-Ereignisses würde es ein seltsames Verhalten geben: Die angeklickten Schaltflächen würden nicht die sein, auf die ich tatsächlich geklickt habe, wodurch die Links unterbrochen würden. Außerdem würde es die .show-Klasse zu einigen anderen nicht verwandten Dropdowns in meinem Navi hinzufügen, was noch mehr seltsame Dinge verursachen würde.

  • Versucht, div in li zu ändern
  • Versucht, e.preventDefault () und e.stopPropagation ()
  • Versuchte und versuchte mehr

Nichts würde funktionieren.

Stattdessen hatte ich die (bisher) wunderbare Idee, dies zu tun:

$(window).on('hashchange',function(){
   $(".navbar-collapse.show").collapse('hide');
});

Ich hatte bereits Sachen in dieser Hashchange-Funktion, si ich musste nur diese Zeile hinzufügen.

Es macht genau das, was ich will: das Menü reduzieren, wenn sich der Hash ändert (dh ein Klick, der an eine andere Stelle führt, ist aufgetreten). Was gut ist, denn ich kann jetzt Links in meinem Menü haben, die es nicht reduzieren.

Wer weiß, vielleicht hilft das jemandem in meiner Situation!

Und danke an alle, die an diesem Thread teilgenommen haben, viele Informationen, die hier gelernt werden können.

Papiersaft
quelle
0

In den meisten Fällen möchten Sie die Umschaltfunktion nur aufrufen, wenn die Umschalttaste sichtbar ist ...

if ($('.navbar-toggler').is(":visible")) $('.navbar-toggler').click();
EddieB
quelle
-1

Das eingecheckte Menü wird geöffnet, indem die Klasse 'in' eingecheckt und dann der Code ausgeführt wird.

$('.navbar-collapse a').on('click', function(){
    if ( $( '.navbar-collapse' ).hasClass('in') ) {
        $('.navbar-toggle').click();
    }
});

funktioniert perfekt.

Aamer Shahzad
quelle