Как скрыть Twitter Bootstrap выпадающий список


это становится раздражающим - когда я нажимаю на элемент в раскрывающемся списке Bootstrap, раскрывающийся список не закрывается. Я настроил его, чтобы открыть лайтбокс Facebox, когда вы нажимаете выпадающий элемент, но с ним есть проблема.


что я пробовал

когда элемент нажат, я попытался сделать это:

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

это скрывает его, но потом по какой-то причине он не откроется снова.

как вы можете видеть, я действительно нужно раскрывающийся список, чтобы закрыть, потому что он выглядит дерьмово, когда он остается открытым (в основном потому, что z-index из выпадающего списка выше, чем наложение модального поля Facebox.


почему я не использую встроенную модальную коробку Bootstrap

Если вам интересно, почему я не использую красивые модальные окна встроенный в Bootstrap, это потому, что:

  1. у него нет способа загрузить содержимое в него с помощью AJAX.
  2. вы нужно вводить HTML каждый раз для модального; с Facebox вы можете сделать простой: $.facebox({ajax:'/assets/ajax/dialogs/dialog?type=block-user&id=1234567'});
  3. он использует анимацию CSS3 для анимации (что выглядит очень красиво), но в браузерах, отличных от CSS3, он просто показывает, что выглядит не так хорошо; Facebox использует JavaScript для затухания, поэтому он работает во всех браузерах.
22 83

22 ответа:

попробуйте это:

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

Это также может работать для вас:

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

опробовал большинство вариантов отсюда, но ни один из них действительно не работал для меня. (тег $('.dropdown.open').removeClass('open'); действительно скрыл его, но если вы нажмете на что-нибудь еще, он снова появится.

Так что я в конечном итоге делаю это с $("body").trigger("click")

вам нужно только сделать $('.dropdown.open').removeClass('open'); удалить вторую строку, которая скрывает выпадающее меню.

Это можно сделать без написания кода JavaScript, добавив атрибут data-toggle= "dropdown" в якорь тег, как показано ниже:

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

Это то, что сработало для меня:

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

выбранный ответ не работает для меня, но я думаю, что это из-за новой версии Bootstrap. В итоге я написал следующее:

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

надеюсь, что это полезно для кого-то еще в будущем.

зачем использовать мой метод, потому что если пользователь выходит из div, этот метод позволяет пользователю определенную задержку до исчезновения подменю. Это так же, как с помощью плагина superfish.

1) сначала загрузите hover intent javascript

Ссылка здесь: Hover intent javascript

2)Вот мой код

$(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);

    });

попробуйте это!

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

или

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

это всегда работает для меня.

попробуйте открыть HTML с Bootstrap Modal, я использую этот код:

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

и ссылка такой:

<a href="#my_page" data-toggle="modal">PAGE</a>
$('.dropdown.open').removeClass('open');

чтение документации и использование JavaScript это можно сделать с помощью метода переключения:

$('.button-class').on('click',function(e) {
    e.preventDefault();
    $('.dropdown-class').dropdown('toggle');
}

вы можете прочитать об этом в: http://getbootstrap.com/javascript/#dropdowns-methods

вот мое решение о том, как закрыть закладку в выпадающем списке и кнопкой :

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

где " это " - глобальный контейнер группы кнопок.

это сработало для меня, у меня была навигационная панель и несколько выпадающих меню.

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

самый простой способ сделать это: вы добавляете скрыть надпись:

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

затем каждый раз, когда вы хотите скрыть выпадающий список, вы звоните:

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

Не знаю, поможет ли это кому-нибудь (может быть, это слишком специфично для моего случая, а не для этого вопроса), но для меня это сработало:

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

после нажмите:

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

используйте class= "dropdown-toggle" на теге привязки, а затем, когда вы нажмете на тег привязки, он закроет раскрывающийся список bootstrap.

Эй, этот простой трюк jQuery должен помочь.

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

простейший путь:

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

вы можете использовать этот код в текущем обработчике событий

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

в моем сценарии я использовал, когда ajax вызов complete

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

Bootstrap 4.1:

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