Ocultar o colapso de navegação do Twitter Bootstrap ao clicar

133

Esta não é uma lista suspensa de submenus, a categoria é classe li, como na figura:

insira a descrição da imagem aqui

Ao selecionar uma categoria no menu responsivo (o modelo é apenas uma página), desejo ocultar o colapso da navegação automaticamente ao clicar. Também passe para usar como navegação, pois o modelo tem apenas uma página. Eu procuro uma solução que não a afete, aqui está o código HTML do menu:

    <!-- 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
fonte
e minha solução funcionando ou não?
WooCaSh
@WooCaSh Funcionou bastante, a ordem da solução custom.js estava errada, notei $ ('nav a'). On ('click', function () {e, no meu caso, é uma classe, depois $ ('. Nav a'). On ('click', function () {. Obrigado, você me ajudou muito!
Tim Vitor
possível duplicada da barra de navegação responsiva Fechar automaticamente
chrylis -cautiouslyoptimistic-
Se você não quiser comparar todas essas soluções aqui, edite o número 1 desta resposta e o que você deve fazer.
caw
Você pode ver minha resposta aqui stackoverflow.com/questions/14248194/…
Camel

Respostas:

165

tente isto:

$('.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
fonte
1
Isso funcionou muito bem. Obrigado WooCaSh. Também sugeri adicionar um "." para o código antes de $ ('nav a') => $ ('. nav a'). [Seletor de classe estava faltando um ponto ""]
Clain Dsilva
7
Para sua informação, isso não funciona em todos os casos. Se a janela for redimensionada e abrir o menu móvel, ela será aberta por padrão.
Andrew Boes 13/09/13
8
UPDATE: O seletor usual para o bootstrap 3 é .navbar-toggle, então $ (". Navbar-toggle"). Click ();
Richard
41
Isso está causando problemas na barra de navegação. Melhor usar $ ('. Nav-collapse'). Collapse ('hide'); evento ao clicar em vez de clicar no botão de alternância.
Rohan
7
Quando a barra de navegação estiver aberta no modo "área de trabalho", ela piscará ou fechará e reabrirá ao usá-la.
31915 mlapaglia
134

Eu apenas replico os 2 atributos do btn-navbar( data-toggle="collapse" data-target=".nav-collapse.in") em cada link como este:

<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>

Na barra de navegação do Bootstrap 4 , infoi alterado para, showportanto, a sintaxe seria:

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

Zu1779
fonte
13
Adicionar data-togglee data-target<li> é uma solução mais limpa. Obrigado.
trante
9
Funciona bem no celular, mas também causa a animação da barra de navegação na área de trabalho, o que é indesejável.
James Brewer
34
@JamesBrewer Para evitar a animação colapso na versão desktop add .into-the-alvo de dados:data-toggle="collapse" data-target=".nav-collapse.in"
Daghall
23
Não se esqueça de substituir .nav colapso com .navbar-colapso de inicialização 3
kuceram
3
Essa deve ser a resposta aceita! Obrigado por publicá-lo!
Trixtur
60
$(function() {
    $('.nav a').on('click', function(){ 
        if($('.navbar-toggle').css('display') !='none'){
            $('.navbar-toggle').trigger( "click" );
        }
    });
});
user2883298
fonte
6
Essa é uma solução melhor, pois evita falhas quando os links são visíveis.
Bruno Dias
No Bootstrap 4, é .navbar-toggler. Enfim, super código de trabalho, obrigado!
Xdg 6/01
45

Melhor usar os métodos padrão collapse.js ( documentos V3 , documentos V4 ):

$('.nav a').click(function(){
    $('.nav-collapse').collapse('hide');
});
Vadim P.
fonte
4
Definitivamente melhor do que usar as funções de clique! É melhor manter o risco ao mínimo, interagindo apenas com as coisas que você deseja alterar. Um evento de clique pode causar a execução de funções indesejadas adicionais. Não sabia sobre esse método de recolhimento, obrigado.
18715 Andrew Andrew
1
Esta é a melhor solução que encontrei até agora. Obrigado. Apenas uma pequena melhora fiz: substituir o .nav aselector por este:.nav a:not(.dropdown-toggle)
mneute
Para mim, na minha página de exemplo, em vez de inicialização 4 .nav aeu tive que usar.navbar a
alexandre1985
Você não quer dizer .navbar-collapsee não .nav-collapse?
Volomike
Não, não, porque .nav-collapsefoi usado no exemplo de código de pergunta.
Vadim P.
32

Ainda mais elegante, sem uma lambida de código duplicado, é simplesmente aplicar os atributos data-toggle="collapse"e data-target=".nav-collapse"à própria navegação:

<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 limpo, sem a necessidade de JavaScript. Funciona muito bem, desde que seus nav aelementos tenham preenchimento suficiente para dedos gordos e você não impeça a ocorrência de eventos de clique e.stopPropagation()quando os usuários clicam nos nav aitens.

purefusion
fonte
1
Essa é a maneira correta de autoinicializar esse comportamento.
ApenasVB
2
Eu sugeriria modificar o alvo para incluir também na classe. Isso impedirá que as versões da área de trabalho se comportem de maneira estranha. data-target=".nav-collapse.in"
Dave
O melhor disso é que ele funciona com o routerLink da angular 4, enquanto as outras soluções não!
Stt106
1
No Bootstrap 4 seria<div class="collapse navbar-collapse" data-toggle="collapse" data-target=".navbar-collapse">
JoshJoe
17

Atualize seu

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

para

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

Essa simples mudança funcionou para mim.

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

FullStackDev
fonte
1
Essa deve ser a resposta aceita. Funciona perfeitamente com convenções padrão de inicialização.
21315 Bradley
1
Acordado. Esta é a maneira correta de conseguir isso. Não há necessidade de jQuery. Não entendo por que isso recebeu tão pouco voto positivo / atenção.
wahwahwah
Em uma página mestra "padrão" do Visual Studio, isso resultará no menu de hambúrguer desaparecendo e sem opções de menu. Esta resposta funciona apenas com um layout de configuração de menu específico (que você não fornece como exemplo).
Gone Coding
1
Isso não funcionaria mais. use data-target=".navbar-collapse.in"como no novo padrão de inicialização. A .inclasse é evitar a animação quando no desktop
Philip oghenerobo Balogun
Eu usei esta solução na minha situação, mas usei o ID do meu div.navbar-collapseelemento como data-targetparâmetro.
maxathousand
13

A navegação deve ser fechada sempre que um usuário clicar em qualquer lugar do corpo - não apenas nos elementos de navegação. O menu Say está aberto, mas o usuário clica no corpo da página. O usuário espera ver o menu fechar.

Você também deve garantir que o botão de alternância esteja visível, caso contrário, um salto é visto no menu.

$(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
fonte
"Os elementos são considerados visíveis se consumirem espaço no documento." Seu código foi criado para impedir o recolhimento se o recolhimento da barra de navegação não estiver visível na tela, mas não.
Steve M
Não só que ele funciona muito bem, mas também é a única solução que funcionou para mim, de bootstrap> 3.
AME
13

Testado no Bootstrap 3.3.6 - trabalho!

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

TheAivis
fonte
7

Tente isso> Bootstrap 3

Brilhante exatamente o que eu estava procurando, no entanto, tive alguns confrontos com o javascript e o modal de bootstrap, isso foi corrigido.

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

Espero que isto ajude.

Getsomepeaches
fonte
6

Isto funcionou bem para mim. É o mesmo que a resposta aceita, mas corrige o problema relacionado à visualização de desktop / tablet

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

MichaelMcCabe
fonte
window.innerWidth <= 767 é melhor;) ou window.innerWidth <768
Alex Tape
Isso deve ser selecionado como uma resposta superior. No entanto, isso não funciona com menus suspensos. Eu o corrigi substituindo o seletor por: $ ('. Navbar-nav').
Find
6

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

Jagdish Singh
fonte
Isso funciona para mim. Eu tenho uma barra de navegação em todas as visualizações do kendo, por isso preciso fechá-las no beforeShowevento.
xinthose
4

Eu acho que é melhor usar os métodos collapse.js padrão do Bootstrap 3 usando o .navbar-collapseelemento como recolhível que você deseja ocultar, como mostrado abaixo.

Outras soluções podem causar outros problemas indesejados na maneira como os elementos são exibidos ou funcionam em sua página da web. Portanto, embora algumas soluções pareçam corrigir o seu problema inicial, elas podem muito bem apresentar outras, portanto, execute um teste completo do seu site após qualquer correção.

Para ver este código em ação:

  1. Pressione "Executar este trecho de código" abaixo.
  2. Pressione o botão "Página inteira".
  3. Dimensionar a janela até que o menu suspenso seja ativado.
  4. Em seguida, selecione uma opção de menu e pronto!

Felicidades!

Franciscus Agnew
fonte
Isso é muito melhor do que a resposta atualmente aceita. Com esse, recebo animações fantasmas na área de trabalho.
Cody
3

Em cada link suspenso, coloque data-toggle = "collapse" e data-target = ". Nav-collapse" em que nav-collapse é o nome que você atribui à lista suspensa.

<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>

Isso está funcionando perfeitamente na tela que possui uma lista suspensa, como telas móveis, mas no desktop e tablet ele cria um flickr. Isso ocorre porque a classe .collapsing é aplicada. Para remover o flickr, criei uma consulta de mídia e inseri o estouro oculto na classe em colapso.

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

Adicionar a tag data-toggle = "collapse" data-target = ". Navbar-collapse.in" à tag <a>funcionou para mim.

<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
fonte
2

Aqui está como eu fiz isso. Se houver uma maneira mais suave, por favor me diga.

Dentro das <a>tags onde estão os links para o menu, adicionei este código:

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

Ele preserva a animação do slide. Portanto, em pleno uso, ficaria assim:

<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
fonte
1
$(function() {
    $('.nav a').on('click touchstart', function(){ 
        if($('.navbar-toggle').css('display') !='none'){
            $(".navbar-toggle").trigger( "click" );
        }
    });
});

// NOTA Adicionei o "touchstart" para toque no celular. touchstart / end não tem atraso

APOUGHER
fonte
1

Esta é a melhor solução que eu usei.

$(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
fonte
1

Para aqueles que notaram as barras de navegação da área de trabalho piscam ao usar esta solução:

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

Uma solução simples para esse problema é referenciar a barra de navegação recolhida apenas verificando a presença de 'in':

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

Isso reduz a barra de navegação ao clicar quando a barra de navegação está no modo móvel, mas deixa a versão para desktop em paz. Isso evita o tremor que muitas pessoas testemunharam nas versões para desktop.

Além disso, se você tiver uma barra de navegação com menus suspensos , não poderá vê-los, pois a barra de navegação ficará oculta assim que você clicar neles; portanto, se você tiver menus suspensos (como eu!), Use o seguinte:

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

Isso procura a presença da classe suspensa acima do link clicado no DOM; se existir, o link pretendia iniciar um menu suspenso e, consequentemente, o menu não fica oculto. Quando você clica em um link no menu suspenso, a barra de navegação é ocultada corretamente.

Entidade única
fonte
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');
  }
});
טאבו ישראל שרות לקוחות
fonte
1

100% de trabalho: -

Adicionar em HTML

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

Javascript

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

Isso oculta o colapso da navegação em vez de animar, mas o mesmo conceito da resposta acima

JS:

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

HTML:

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

Prefiro isso em sites de página única porque uso o localScroll.js que já anima.

andreaslarsen.dk
fonte
0

Visualização móvel: como ocultar a navegação de alternância no bootstrap + menu suspenso + jquery + scrollto com itens de navegação que apontam para âncoras / IDs na mesma página , modelo de uma página

O problema que eu estava experimentando com qualquer uma das soluções acima é que elas estão recolhendo apenas os itens do submenu, enquanto o menu de navegação não é recolhido.

Então eu fiz o meu pensamento .. e o que podemos observar? Bem, toda vez que nós / usuários clicamos em um link de rolagem para rolagem, queremos que a página role para essa posição e, simultaneamente, reduza o menu para restaurar a exibição da página.

Bem ... por que não atribuir esse trabalho às funções scrollto? Fácil :-)

Então nos dois códigos

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

e

// 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");
}

Acabei de adicionar o mesmo comando nas duas funções

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

(parabéns a um dos colaboradores acima)

assim (o mesmo deve ser adicionado aos dois pergaminhos)

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

se você quiser vê-lo em ação, basta dar uma olhada nos dados de recuperação do NAS

Robert
fonte
0

Os usuários do Bootstrap3 tentam o código abaixo. Funcionou para mim.

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
fonte
0

O Bootstrap define uma .inclasse no elemento Collapse para acionar a animação - para abri-la. Se você simplesmente remover a .inclasse, a animação não será executada, mas ocultará o elemento - não exatamente o que você deseja.

Provavelmente, é mais rápido executar uma ifinstrução para verificar se a classe de auto-inicialização padrão .infoi configurada no elemento

Portanto, este código diz apenas:

se meu elemento tiver a classe .inaplicada, feche-a acionando a animação Bootstrap padrão. Caso contrário, execute a ação / animação padrão do Bootstrap para abri-lo

$('#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
fonte
0

Adicione um ID a cada

<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
fonte
0

Outra solução rápida para o Bootstrap 3. * pode ser:

$( 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
fonte
0

Publiquei uma solução que funciona com Aurelia aqui: https://stackoverflow.com/a/41465905/6466378

O problema é que você não pode apenas adicionar data-toggle="collapse"e adicionar data-target="#navbar"aos seus elementos. E o jQuery não funciona em um ambiente Aurelia ou Angular.

A melhor solução para mim foi criar um atributo personalizado que escute a consulta de mídia correspondente e adicione o data-toggle="collapse"atributo, se desejado:

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

O atributo personalizado com Aurelia se parece com isso:

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
fonte
0

Estou no Bootstrap 4, usando o fullPage.js com uma navegação superior fixa e tentei tudo listado aqui, com resultados mistos.

  • Tentei da melhor maneira:

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

    O menu entraria em colapso, mas os links href não levariam a lugar algum.

  • Tentei de outras maneiras lógicas:

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

    Haveria algum comportamento estranho por causa do evento touchstart: os botões clicados não seriam os que eu realmente clicara, quebrando os links. Além disso, ele adicionaria a classe .show a outros menus suspensos não relacionados na minha navegação, causando coisas mais estranhas.

  • Tentou alterar div para li
  • Tentou e.preventDefault () e e.stopPropagation ()
  • Tentei e tentei mais

Nada daria certo.

Então, em vez disso, tive a (maravilhosa) idéia de fazer isso:

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

Eu já tinha coisas nessa função de troca de hash, e só precisava adicionar essa linha.

Na verdade, ele faz exatamente o que eu quero: recolher o menu quando o hash mudar (ou seja, um clique levando a outro lugar). O que é bom, porque agora posso ter links no meu menu que não serão recolhidos.

Quem sabe, talvez isso ajude alguém na minha situação!

E obrigado a todos que participaram desse tópico, muitas informações a serem aprendidas aqui.

Paperjuice
fonte
0

Na maioria dos casos, você desejará chamar a função de alternância apenas se o botão de alternância estiver visível ...

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

O check-in do menu é aberto marcando a classe 'in' e, em seguida, execute o código.

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

funciona perfeitamente.

Aamer Shahzad
fonte