Cara menyembunyikan dropdown Twitter Bootstrap


93

Ini semakin menjengkelkan - ketika saya mengklik item di dropdown Bootstrap, dropdown tidak menutup. Saya sudah menyiapkannya untuk membuka lightbox Facebox saat Anda mengklik item dropdown tetapi ada masalah dengannya.

masukkan deskripsi gambar di sini


Apa yang telah saya coba

Saat item diklik, saya mencoba melakukan ini:

    $('.dropdown.open').removeClass('open');
    $('.dropdown-menu').hide();

Itu menyembunyikannya, tapi karena alasan tertentu itu tidak akan terbuka lagi.

Seperti yang Anda lihat, saya sangat membutuhkan dropdown untuk ditutup, karena terlihat jelek ketika tetap terbuka (terutama karena z-indexdropdown lebih tinggi daripada tampilan kotak modal Facebox.


Mengapa saya tidak menggunakan kotak modal bawaan Bootstrap

Jika Anda bertanya-tanya mengapa saya tidak menggunakan kotak modal yang tampak bagus yang dibangun pada Bootstrap , itu karena:

  1. Itu tidak memiliki cara untuk memuat konten ke dalamnya dengan AJAX.
  2. Anda harus mengetik HTML setiap kali untuk modal; dengan Facebox Anda dapat melakukan hal sederhana:$.facebox({ajax:'/assets/ajax/dialogs/dialog?type=block-user&id=1234567'});
  3. Ia menggunakan animasi CSS3 untuk menganimasikan (yang terlihat sangat bagus) tetapi di browser non-CSS3 itu hanya ditampilkan, yang tidak terlihat bagus; Facebox menggunakan JavaScript untuk memudar sehingga berfungsi di semua browser.

Jawaban:


176

Coba ini:

$('.dropdown.open .dropdown-toggle').dropdown('toggle');

Ini mungkin juga berhasil untuk Anda:

$('[data-toggle="dropdown"]').parent().removeClass('open');

Saya memperbarui kode. Silakan coba lagi. Saya mencoba ini pada dropdown terbuka dan menutupnya dengan baik. Saya juga bisa membukanya kembali setelah itu.
Bart Wegrzyn

3
Saya menambahkan metode lain yang mungkin berhasil untuk Anda. Jika tidak, periksa kembali apakah elemen div.btn-group yang menahan tombol Anda memiliki kelas "buka" yang ditetapkan padanya.
Bart Wegrzyn

9
.dropdown('toggle')menutup dropdown tetapi juga menonaktifkannya dari pembukaan lagi! Saya tidak tahu apa gunanya itu!
orad

2
ketika saya menggunakan .dropdown ('toggle'), penangan klik lain yang dilampirkan ke item dalam dropdown berhenti bekerja. Saya tidak memiliki masalah ini ketika saya menggunakan metode .parent (). RemoveClass ('open'), bagaimanapun.
Ben

7
Perhatian: menghapus openkelas berfungsi, tetapi kelas tidak diperbarui aria-expanded. Selalu lebih baik menggunakan API jika memungkinkan.
claviska

26

mencoba sebagian besar opsi dari sini tetapi tidak ada yang benar-benar berhasil untuk saya. (itu$('.dropdown.open').removeClass('open'); memang menyembunyikannya, tetapi jika Anda mengarahkan mouse sebelum mengklik apa pun, itu akan muncul lagi.

jadi saya akhirnya melakukannya dengan a $("body").trigger("click")


Itu cara yang bagus untuk melakukannya juga! Jadi, ketika Anda mengklik secara virtual <body>, itu menutup drop-down?
Nathan

4
ya, tarik-turun ini mencantumkan peristiwa klik dari pengguna di luar menu. :)
VeXii

1
@VeXii ya, dan itulah alasannya tidak menutup sendiri di perangkat seluler. Semoga bootstrap baru versi 3 ("seluler dulu") memperbaiki ini.
Mister Smith

1
Bekerja tanpa cacat.
Dovy

11
$('.open').removeClass('open');

Bootstrap 4 (Oktober 2018):

$('.show').removeClass('show');

Saya pikir ini benar-benar solusi yang paling sederhana, kecuali dengan Bootstrap 4 Anda menggunakan kelas 'show'.
Dagmar

6

Anda hanya perlu $('.dropdown.open').removeClass('open');menghapus baris kedua yang menyembunyikan menu dropdown.


2
Tapi ini tidak akan mengubah atribut-aria.
Bung

5

Ini dapat dilakukan tanpa menulis kode JavaScript dengan menambahkan atribut data-toggle = "dropdown" ke dalam tag anchor seperti yang ditunjukkan di bawah ini:

<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<div class="dropdown">
  <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-expanded="true">
    Dropdown
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
    <li role="presentation"><a role="menuitem" tabindex="-1" href="#" data-toggle="dropdown">Action</a></li>
    <li role="presentation"><a role="menuitem" tabindex="-1" href="#" data-toggle="dropdown">Another action</a></li>
  </ul>
</div>


Jawaban paling sederhana dan paling relevan untuk saya. Dijelaskan dengan baik. Terima kasih
Simmoniz

5

Inilah yang berhasil untuk saya:

$(this).closest(".dropdown").find(".dropdown-toggle").dropdown("toggle");

4

Jawaban yang dipilih tidak berhasil untuk saya, tetapi saya pikir itu karena versi Bootstrap yang lebih baru. Saya akhirnya menulis ini:

$('.btn-navbar').addClass('collapsed');
$('.nav-collapse').removeClass('in').css('height', '0');

Semoga bermanfaat bagi orang lain di masa depan.


Terima kasih atas jawabannya. Saya yakin saya masih menggunakan Bootstrap 2.2.
Nathan

4

Coba ini!

.removeClass("open").trigger("hide.bs.dropdown").trigger("hidden.bs.dropdown");

ATAU

$(clicked_element).trigger("click");

Itu selalu berhasil untuk saya.


U sang raja! hal terbaik untukku! Tnx!
Dudi

3

Mengapa menggunakan metode saya, karena jika pengguna keluar dari div, metod ini memungkinkan pengguna penundaan tertentu sebelum submenu menghilang. Ini seperti menggunakan plugin superfish.

1) Pertama unduh javascript maksud hover

Tautkan di sini: Javascript maksud arahkan kursor

2) Ini kode saya untuk dieksekusi

$(document).ready(function(){

        var config = {    
            over: showBootrapSubmenu,   
            timeout: 500,
            out: hideBootrapSubmenu  
        };

        function showBootrapSubmenu(){  
             $(this).addClass('open');
        }
        function hideBootrapSubmenu(){  
          $(this).removeClass('open');
            }

        //Hover intent for Submenus
        $(".dropdown").hoverIntent(config);

    });



1

Coba buka HTML dengan Bootstrap Modal, saya menggunakan kode ini:

$(function() {
     $('a[data-toggle=modal]').click(function(e) {
          e.preventDefault();
          var page = $(e.target).attr('href');
          var url = page.replace('#','');
          $(page).on('show', function () {
              $.ajax({
              url: "/path_to/"+url+".php/html/...",
              cache: false,
              success: function(obj){
                   $(page).css('z-index', '1999');
                   $(page).html(obj);
              }
              });
         })
     });
}); 

dan tautannya seperti ini:

<a href="#my_page" data-toggle="modal">PAGE</a>

1

Berikut adalah solusi saya tentang cara menutup dropdown tombol dan mengaktifkan tombol:

$(".btn-group.open", this)
    .trigger("click")
    .children("a.dropdown-toggle")
    .trigger("blur")

Di mana "ini" adalah wadah global dari grup tombol.


1

Bootstrap 4.1:

$(".dropdown-link").closest(".dropdown-menu").removeClass('show');

0

ini berhasil untuk saya, saya memiliki navbar dan beberapa menu pulldown.

$(document).ready(function () {
    $('a.dropdown-toggle').each(function(){
        $(this).on("click", function () {
            $('li.dropdown').each(function () {
                $(this).removeClass('open');
            });
        });
    });
});

0

Cara termudah untuk melakukannya adalah: Anda menambahkan label sembunyikan:

<label class="hide_dropdown" display='hide'></label>

lalu setiap kali Anda ingin menyembunyikan dropdown, Anda memanggil:

$(".hide_dropdown").trigger('click');

0

Tidak tahu apakah ini akan membantu siapa pun (mungkin terlalu spesifik untuk kasus saya, dan bukan untuk pertanyaan ini) tetapi bagi saya ini berhasil:

$('.input-group.open').removeClass('open');

0

Setelah klik:

// Hide mobile menu
$('.in,.open').removeClass('in open');
// Hide dropdown
$('.dropdown-menu').css('display','none');
setTimeout(function(){
    $('.dropdown-menu').css('display','');
},100);

0

Gunakan class = "dropdown-toggle" pada tag anchor, lalu saat Anda mengklik tag anchor, dropdown bootstrap akan ditutup.


0

Hei trik jQuery sederhana ini akan membantu.

$(".dropdown li a").click(function(){
$(".dropdown").removeClass("open");
});

0

Cara termudah:

  $('.navbar-collapse a').click(function(){
    $('.navbar-toggle').trigger('click')
  })

0

Anda dapat menggunakan kode ini di event handler Anda saat ini

$('.in,.open').removeClass('in open');

dalam skenario saya, saya menggunakan saat panggilan ajax selesai

jQuery(document).on('click', ".woocommerce-mini-cart__buttons .wc-forward.checkout", function() {
    var _this = jQuery(this);
    ajax_call(_this.attr("data-ajax-href"), "checkout-detail");
    $('.in,.open').removeClass('in open');
    return false;
});

0

Memilih berdasarkan atribut adalah cara yang lambat. Berikut adalah solusi paling cepat untuk menyembunyikan dropdown yang dibuka:

$(".dropdown-menu.show").parent().dropdown("toggle");

atau gunakan yang berikut, jika .dropdown-menu bukan elemen turunan berikutnya (temukan kontrol drop-down induk terdekat):

$(".dropdown-menu.show").closest(".dropdown").dropdown("toggle");

0

Ini mungkin telah ditambahkan dalam retrospeksi (meskipun, fitur itu tidak didokumentasikan , bahkan di Bootstrap 4.3.1), tetapi Anda cukup memanggilnya dengan hideparameter. Pastikan untuk memanggilnya di elemen toggler. Seperti:

$('.dropdown-toggle').dropdown('hide');
// or
$('[data-toggle="dropdown"]').dropdown('hide');

Tentu saja, ini juga berlaku sebaliknya show.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.