Как скрыть Twitter Bootstrap выпадающий список
это становится раздражающим - когда я нажимаю на элемент в раскрывающемся списке Bootstrap, раскрывающийся список не закрывается. Я настроил его, чтобы открыть лайтбокс Facebox, когда вы нажимаете выпадающий элемент, но с ним есть проблема.
что я пробовал
когда элемент нажат, я попытался сделать это:
$('.dropdown.open').removeClass('open');
$('.dropdown-menu').hide();
это скрывает его, но потом по какой-то причине он не откроется снова.
как вы можете видеть, я действительно нужно раскрывающийся список, чтобы закрыть, потому что он выглядит дерьмово, когда он остается открытым (в основном потому, что z-index
из выпадающего списка выше, чем наложение модального поля Facebox.
почему я не использую встроенную модальную коробку Bootstrap
Если вам интересно, почему я не использую красивые модальные окна встроенный в Bootstrap, это потому, что:
- у него нет способа загрузить содержимое в него с помощью AJAX.
- вы нужно вводить HTML каждый раз для модального; с Facebox вы можете сделать простой:
$.facebox({ajax:'/assets/ajax/dialogs/dialog?type=block-user&id=1234567'});
- он использует анимацию CSS3 для анимации (что выглядит очень красиво), но в браузерах, отличных от CSS3, он просто показывает, что выглядит не так хорошо; Facebox использует JavaScript для затухания, поэтому он работает во всех браузерах.
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");
выбранный ответ не работает для меня, но я думаю, что это из-за новой версии 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>
чтение документации и использование 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"); });
вы можете использовать этот код в текущем обработчике событий
$('.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; });