Sembunyikan Twitter Bootstrap dan runtuh saat klik

133

Ini bukan dropdown submenu, kategorinya adalah kelas li seperti pada gambar:

masukkan deskripsi gambar di sini

Dengan memilih kategori dari menu responsif (templatnya hanya satu halaman), saya ingin menyembunyikan nav collapse secara otomatis saat mengklik. Juga berjalan-jalan untuk digunakan sebagai navigasi, karena templat hanya memiliki satu halaman. Saya mencari solusi yang tidak mempengaruhi itu, berikut adalah kode menu HTML:

    <!-- 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
sumber
dan solusi saya berfungsi atau tidak?
WooCaSh
@WooCaSh Bekerja lebih baik urutan custom.js solusi mereka salah, saya perhatikan $ ('nav a'). Pada ('klik', fungsi () {dan dalam kasus saya ini adalah kelas, lalu $ ('. Nav a'). Pada ('klik', fungsi () {. Terima kasih, Anda banyak membantu saya!
Tim Vitor
kemungkinan duplikat dari Close responsif navbar secara otomatis
chrylis -cautiouslyoptimistic-
Jika Anda tidak ingin mencoba dan membandingkan sendiri semua solusi ini di sini, edit # 1 dari jawaban ini yang harus Anda lakukan.
gak
Anda dapat melihat jawaban saya di sini stackoverflow.com/questions/14248194/…
Unta

Jawaban:

165

coba ini:

$('.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
sumber
1
Ini bekerja dengan baik. Terima kasih WooCaSh. Juga disarankan menambahkan "." ke kode sebelum $ ('nav a') => $ ('. nav a'). [Pemilih kelas kehilangan satu titik "."]
Clain Dsilva
7
FYI, ini tidak berfungsi dalam semua kasus. Jika ukuran jendela kembali dan memunculkan menu seluler itu akan terbuka secara default.
Andrew Boes
8
UPDATE: Pemilih biasa untuk bootstrap 3 adalah .navbar-toggle, jadi $ (". Navbar-toggle"). Klik ();
Richard
41
Ini menyebabkan masalah di navbar. Lebih baik menggunakan $ ('. Nav-collapse'). Collapse ('hide'); pada acara klik daripada membuat klik tombol sakelar.
Rohan
7
Ketika navbar terbuka dalam mode "desktop" itu akan berkedip atau ditutup kemudian buka kembali saat menggunakan ini.
mlapaglia
134

Saya hanya meniru 2 atribut dari btn-navbar( data-toggle="collapse" data-target=".nav-collapse.in") pada setiap tautan seperti ini:

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

Di Bootstrap 4 Navbar , intelah berubah showjadi sintaksnya adalah:

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

Zu1779
sumber
13
Menambahkan data-toggledan data-targetke <li> adalah solusi yang lebih bersih. Terima kasih.
trante
9
Berfungsi dengan baik di ponsel, tetapi menyebabkan animasi runtuh navbar di desktop juga, yang tidak diinginkan.
James Brewer
34
@JamesBrewer Untuk menghindari runtuhnya animasi pada versi desktop, tambahkan .inke target data:data-toggle="collapse" data-target=".nav-collapse.in"
Daghall
23
Jangan lupa ganti .nav-collapse dengan .navbar-collapse untuk bootstrap 3
kuceram
3
Ini harus menjadi jawaban yang diterima! Terima kasih telah mempostingnya!
trixtur
60
$(function() {
    $('.nav a').on('click', function(){ 
        if($('.navbar-toggle').css('display') !='none'){
            $('.navbar-toggle').trigger( "click" );
        }
    });
});
pengguna2883298
sumber
6
Ini adalah solusi yang lebih baik, karena mencegah kesalahan ketika tautan terlihat.
Bruno Dias
Pada Bootstrap 4, ini .navbar-toggler. Bagaimanapun, kode super berfungsi, terima kasih!
Xdg
45

Lebih baik menggunakan metode collapse.js default ( V3 docs , V4 docs ):

$('.nav a').click(function(){
    $('.nav-collapse').collapse('hide');
});
Vadim P.
sumber
4
Jelas lebih baik daripada menggunakan fungsi klik! Yang terbaik adalah menjaga risiko seminimal mungkin dengan berinteraksi hanya dengan hal-hal yang ingin Anda ubah. Acara klik dapat menyebabkan fungsi tambahan yang tidak diinginkan dijalankan. Tidak tahu tentang metode keruntuhan ini, terima kasih.
Andrew
1
Ini adalah solusi terbaik yang saya temukan sejauh ini. Terima kasih. Hanya sedikit perbaikan yang saya buat: ganti .nav apemilih dengan yang ini:.nav a:not(.dropdown-toggle)
mneute
Bagi saya, pada halaman contoh bootstrap 4 saya, alih-alih .nav asaya harus menggunakan.navbar a
alexandre1985
Bukankah maksudmu .navbar-collapsedan bukan .nav-collapse?
Volomike
Tidak, saya tidak, karena .nav-collapsedigunakan dalam contoh kode pertanyaan.
Vadim P.
32

Bahkan lebih elegan tanpa menjilat kode duplikat, adalah dengan hanya menerapkan data-toggle="collapse"dan data-target=".nav-collapse"atribut ke nav itu sendiri:

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

Sangat bersih, tidak perlu JavaScript. Berfungsi bagus, asalkan nav aelemen Anda memiliki bantalan yang cukup untuk jari-jari yang gemuk, dan Anda tidak mencegah peristiwa klik yang meluap e.stopPropagation()saat pengguna mengeklik nav aitem.

purefusion
sumber
1
Ini adalah cara bootstrap yang tepat untuk menyelesaikan perilaku ini.
apenasVB
2
Saya akan menyarankan memodifikasi target untuk memasukkan dalam kelas juga. Ini akan mencegah versi desktop berperilaku aneh. data-target=".nav-collapse.in"
Dave
Hal yang lebih baik tentang ini adalah ia bekerja dengan routerLink sudut 4 sedangkan solusi lain tidak!
stt106
1
Dalam Bootstrap 4 itu akan menjadi<div class="collapse navbar-collapse" data-toggle="collapse" data-target=".navbar-collapse">
JoshJoe
17

Perbarui

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

untuk

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

Perubahan sederhana ini berhasil bagi saya.

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

FullStackDev
sumber
1
Ini harus menjadi jawaban yang diterima. Berfungsi sempurna dengan konvensi bootstrap standar.
Bradley
1
Sepakat. Ini adalah cara yang benar untuk mencapai ini. Tidak perlu jQuery. Saya tidak mengerti mengapa ini mendapat sedikit upvotes / perhatian.
wahwahwah
Pada halaman master Visual Studio "standar", ini akan mengakibatkan menu burger menghilang dan tidak ada opsi menu. Jawaban ini hanya berfungsi dengan tata letak konfigurasi menu tertentu (yang tidak Anda berikan sebagai contoh).
Hilang Coding
1
Ini tidak akan berfungsi lagi. gunakan data-target=".navbar-collapse.in"seperti dengan standar bootstrap baru. The .inkelas untuk mencegah animasi ketika pada desktop
philip oghenerobo Balogun
Saya telah menggunakan solusi ini dalam situasi saya, tetapi telah menggunakan ID div.navbar-collapseelemen saya sebagai data-targetparameter.
maxathousand
13

Navigasi harus ditutup kapan saja pengguna mengklik di mana saja pada tubuh - bukan hanya elemen navigasi. Menu Say terbuka, tetapi pengguna mengklik di badan halaman. Pengguna berharap untuk melihat menu tutup.

Anda juga harus memastikan tombol sakelar terlihat, jika tidak, lompatan terlihat di 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
sumber
"Elemen dianggap terlihat jika mereka menggunakan ruang dalam dokumen." Kode Anda dimaksudkan untuk mencegah runtuhnya jika navbar-collapse tidak terlihat di layar, tetapi tidak.
Steve M
Bukan hanya itu bekerja dengan baik, tetapi itu juga satu-satunya solusi yang bekerja untuk saya, bootstrap> 3.
AME
13

Diuji pada Bootstrap 3.3.6 - bekerja!

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

TheAivis
sumber
7

Coba ini> Bootstrap 3

Brilliant tepat apa yang saya cari, namun saya memiliki beberapa bentrokan dengan javascript dan modal bootstrap, ini memperbaikinya.

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

Semoga ini membantu.

Getsomepeaches
sumber
6

Ini bekerja dengan baik untuk saya. Sama dengan jawaban yang diterima tetapi memperbaiki masalah yang terkait dengan tampilan desktop / tablet

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

MichaelMcCabe
sumber
window.innerWidth <= 767 lebih baik;) atau window.innerWidth <768
Alex Tape
Ini harus dipilih sebagai jawaban teratas. Namun, ini tidak bekerja dengan drop down. Saya memperbaikinya dengan mengganti pemilih dengan: $ ('. Navbar-nav').
Find
6

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

Jagdish Singh
sumber
Ini bekerja untuk saya. Saya memiliki navbar pada setiap tampilan kendo, jadi saya harus menutupnya di beforeShowacara tersebut.
xinthose
4

Saya pikir lebih baik menggunakan Bootstrap 3 default metode collapse.js menggunakan .navbar-collapseelemen collapsible yang ingin Anda sembunyikan seperti yang ditunjukkan di bawah ini.

Solusi lain dapat menyebabkan masalah lain yang tidak diinginkan dengan cara elemen ditampilkan atau berfungsi di halaman web Anda. Oleh karena itu, walaupun beberapa solusi mungkin muncul untuk memperbaiki masalah awal Anda, mungkin sangat baik memperkenalkan yang lain, jadi pastikan Anda menjalankan pengujian menyeluruh terhadap situs Anda setelah perbaikan apa pun.

Untuk melihat kode ini dalam aksi:

  1. Tekan "Jalankan Cuplikan Kode Ini" di bawah.
  2. Tekan tombol "Halaman Penuh".
  3. Skala jendela sampai drop-down diaktifkan.
  4. Kemudian pilih opsi menu dan voila!

Bersulang!

Franciscus Agnew
sumber
Ini jauh lebih baik daripada jawaban yang diterima saat ini. Dengan yang itu, saya mendapatkan animasi hantu di desktop.
Cody
3

Pada setiap tautan dropdown masukkan data-toggle = "collapse" dan data-target = ". Nav-collapse" di mana nav-collapse adalah nama yang Anda berikan ke daftar dropdown.

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

Ini berfungsi dengan baik pada layar yang memiliki dropdown seperti layar seluler, tetapi pada desktop dan tablet itu menciptakan flickr. Ini karena kelas .collapsing diterapkan. Untuk menghapus flickr, saya membuat kueri media dan menyisipkan overflow yang disembunyikan ke kelas collapsing.

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

Menambahkan data-toggle = "collapse" data-target = ". Navbar-collapse.in" ke tag <a>bekerja untuk saya.

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

Begini cara saya melakukannya. Jika ada cara yang lebih halus, tolong beri tahu saya.

Di dalam <a>tag tempat tautan untuk menu saya tambahkan kode ini:

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

Ini mempertahankan animasi slide. Jadi dalam penggunaan penuh akan terlihat seperti ini:

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

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

// CATATAN Saya menambahkan "touchstart" untuk sentuhan mobile. touchstart / end tidak memiliki penundaan

APOUGHER
sumber
1

Ini adalah solusi terbaik yang saya gunakan.

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

Bagi mereka yang telah memperhatikan desktop navbars flicker saat menggunakan solusi ini:

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

Solusi sederhana untuk masalah itu adalah dengan mereferensikan navbar yang runtuh hanya dengan memeriksa keberadaan 'in':

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

Ini menciutkan navbar saat klik saat navbar berada dalam mode seluler, tetapi akan menyisakan versi desktop. Ini menghindari kerlipan yang banyak orang saksikan terjadi pada versi desktop.

Selain itu, jika Anda memiliki navbar dengan menu dropdown Anda tidak akan dapat melihatnya karena navbar akan disembunyikan segera setelah Anda mengkliknya, jadi jika Anda memiliki menu dropdown (seperti saya lakukan!), Gunakan yang berikut:

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

Ini mencari keberadaan kelas tarik-turun di atas tautan yang diklik di DOM, jika ada, maka tautan itu bermaksud meluncurkan menu tarik-turun dan akibatnya menu tidak disembunyikan. Ketika Anda mengklik tautan di dalam menu dropdown, navbar akan bersembunyi dengan benar.

Entitas tunggal
sumber
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');
  }
});
טט שש.
sumber
1

100% berfungsi: -

Tambahkan dalam HTML

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

Javascript

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

Ini menyembunyikan nav runtuh bukannya menganimasikannya tetapi konsep yang sama seperti jawaban di atas

JS:

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

HTML:

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

Saya lebih suka ini di situs halaman tunggal karena saya menggunakan localScroll.js yang sudah menjiwai.

andreaslarsen.dk
sumber
0

Tampilan seluler: cara menyembunyikan navigasi beralih di bootstrap + dropdown + jquery + gulir dengan item navigasi yang menunjuk ke jangkar / id pada halaman yang sama , satu templat halaman

Masalah yang saya coba dengan salah satu solusi di atas adalah bahwa mereka hanya menciutkan item submenu, sedangkan menu navigasi tidak runtuh.

Jadi saya melakukan pemikiran saya .. dan apa yang bisa kita amati? Ya, setiap kali kita / para pengguna mengklik sebuah tautan scrollto, kami ingin halaman tersebut bergulir ke posisi itu dan pada saat yang sama, tutup menu untuk mengembalikan tampilan halaman.

Nah ... mengapa tidak menugaskan pekerjaan ini ke fungsi scrollto? Mudah :-)

Jadi dalam dua kode

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

dan

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

Saya baru saja menambahkan perintah yang sama di kedua fungsi

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

(pujian kepada salah satu kontributor di atas)

seperti ini (hal yang sama harus ditambahkan ke kedua gulungan)

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

jika Anda ingin melihatnya beraksi, cukup periksa recupero dati da NAS

Robert
sumber
0

Pengguna Bootstrap3 mencoba kode di bawah ini. Ini berhasil untuk saya.

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

Bootstrap menetapkan .inkelas pada elemen Ciutkan untuk memicu animasi - untuk membukanya. Jika Anda hanya menghapus .inkelas, animasi tidak berjalan, tetapi akan menyembunyikan elemen - tidak persis apa yang Anda inginkan.

Mungkin lebih cepat menjalankan ifpernyataan untuk memeriksa apakah kelas bootstrap default .intelah ditetapkan pada elemen.

Jadi kode ini hanya mengatakan:

jika elemen saya .inmenerapkan kelas , tutup dengan memicu animasi Bootstrap default. Jika tidak, jalankan tindakan / animasi Bootstrap default untuk membukanya

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

Tambahkan id lalu ke masing-masing

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

Solusi cepat lain untuk Bootstrap 3. * dapat berupa:

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

Saya memposting solusi yang bekerja dengan Aurelia di sini: https://stackoverflow.com/a/41465905/6466378

Masalahnya adalah Anda tidak bisa hanya menambahkan data-toggle="collapse"dandata-target="#navbar" ke elemen Anda. Dan jQuery tidak bekerja dengan baik di lingkungan Aurelia atau Angular.

Solusi terbaik bagi saya adalah membuat atribut khusus yang mendengarkan kueri media terkait dan menambahkan data-toggle="collapse"atribut jika diinginkan:

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

Atribut khusus dengan Aurelia terlihat seperti ini:

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

halo
sumber
0

Saya menggunakan Bootstrap 4, menggunakan fullPage.js dengan nav teratas yang tetap, dan mencoba semua yang tercantum di sini, dengan hasil yang beragam.

  • Mencoba yang terbaik, cara bersih:

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

    Menu akan runtuh, tetapi tautan href tidak akan mengarah ke mana pun.

  • Mencoba cara lain yang logis:

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

    Akan ada beberapa perilaku aneh karena peristiwa touchstart: tombol yang diklik akan berakhir bukan yang benar-benar saya klik, karenanya memutus tautan. Plus itu akan menambahkan kelas .show ke beberapa dropdown yang tidak terkait lainnya di nav saya, menyebabkan beberapa hal aneh.

  • Mencoba mengubah div ke li
  • Sudah mencoba e.preventDefault () dan e.stopPropagation ()
  • Sudah mencoba dan mencoba lagi

Tidak ada yang berhasil.

Jadi, sebagai gantinya, saya punya ide bagus (sejauh ini) untuk melakukan itu:

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

Saya sudah memiliki beberapa hal dalam fungsi hashchange itu, dan saya hanya perlu menambahkan baris ini.

Ini benar-benar melakukan apa yang saya inginkan: mengosongkan menu ketika hash berubah (yaitu klik yang mengarah ke tempat lain) Itu bagus, karena sekarang saya dapat memiliki tautan di menu saya yang tidak akan runtuh.

Siapa tahu, mungkin ini akan membantu seseorang dalam situasi saya!

Dan terima kasih kepada semua orang yang telah berpartisipasi dalam utas itu, banyak info untuk dipelajari di sini.

Paperjuice
sumber
0

Dalam kebanyakan kasus, Anda hanya ingin memanggil fungsi sakelar jika tombol sakelar terlihat ...

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

Menu yang saya check in dibuka dengan memeriksa kelas 'in' dan kemudian jalankan kodenya.

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

bekerja dengan sempurna.

Aamer Shahzad
sumber