95

这越来越烦人了——当我点击 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 淡入,因此它适用于所有浏览器。
4

24 回答 24

178

试试这个:

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

这也可能对您有用:

$('[data-toggle="dropdown"]').parent().removeClass('open');
于 2012-06-08T00:18:33.277 回答
27

从这里尝试了大多数选项,但没有一个真正适合我。($('.dropdown.open').removeClass('open');确实隐藏了它,但是如果您在单击其他任何内容之前将鼠标悬停,它会再次出现。

所以我决定用$("body").trigger("click")

于 2013-01-22T19:36:04.773 回答
11
$('.open').removeClass('open');

引导程序 4(2018 年 10 月):

$('.show').removeClass('show');
于 2014-11-03T21:55:39.510 回答
6

您只需要$('.dropdown.open').removeClass('open');删除隐藏下拉菜单的第二行。

于 2013-01-21T06:03:15.660 回答
6

这可以通过将属性data-toggle="dropdown"添加到锚标记中来完成,而无需编写 JavaScript 代码,如下所示:

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

于 2014-12-16T10:46:23.993 回答
6

这对我有用:

$(this).closest(".dropdown").find(".dropdown-toggle").dropdown("toggle");
于 2015-05-11T22:05:47.153 回答
4

选择的答案对我不起作用,但我认为这是因为较新版本的 Bootstrap。我最终写了这个:

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

希望这对将来的其他人有所帮助。

于 2012-11-19T15:46:54.477 回答
4

试试这个!

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

或者

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

它总是对我有用。

于 2015-12-09T22:58:14.527 回答
3

为什么使用我的方法,因为如果用户离开了 div,这个方法允许用户在子菜单消失之前有一定的延迟。就像使用 superfish 插件一样。

1)首先下载hover intent javascript

链接在这里:悬停意图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);

    });
于 2012-10-18T17:52:28.843 回答
2
$('.dropdown.open').removeClass('open');
于 2015-02-26T21:36:35.297 回答
2

阅读文档并使用 JavaScript 可以使用 toggle 方法完成:

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

你可以阅读它: http: //getbootstrap.com/javascript/#dropdowns-methods

于 2015-12-01T23:32:55.013 回答
2

回想起来可能已经添加了它(尽管该功能没有 记录在案,即使在 Bootstrap 4.3.1 中也是如此),但您可以简单地使用hide参数调用它。只需确保在切换器元素上调用它即可。像这样:

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

当然,这也与show.

于 2020-07-10T14:20:37.830 回答
1

尝试使用 Bootstrap Modal 打开 HTML,我使用以下代码:

$(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>
于 2012-06-08T07:22:17.820 回答
1

这是我关于如何关闭按钮下拉菜单和切换按钮的解决方案:

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

其中“this”是按钮组的全局容器。

于 2013-03-08T09:57:29.833 回答
1

引导程序 4.1:

$(".dropdown-link").closest(".dropdown-menu").removeClass('show');
于 2018-09-27T09:08:41.190 回答
1

按属性选择是缓慢的方式。这是隐藏打开的下拉列表的最快解决方案:

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

或使用以下,如果 .dropdown-menu 不是下一个子元素(找到最近的父下拉控件):

$(".dropdown-menu.show").closest(".dropdown").dropdown("toggle");
于 2020-02-22T15:49:08.143 回答
0

这对我有用,我有一个导航栏和几个下拉菜单。

$(document).ready(function () {
    $('a.dropdown-toggle').each(function(){
        $(this).on("click", function () {
            $('li.dropdown').each(function () {
                $(this).removeClass('open');
            });
        });
    });
});
于 2012-09-05T18:45:37.047 回答
0

最简单的方法是:添加一个隐藏标签:

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

然后每次你想隐藏下拉菜单时,你打电话:

$(".hide_dropdown").trigger('click');
于 2013-08-30T02:09:08.633 回答
0

不知道这是否会帮助任何人(也许它对我的情况太具体,而不是这个问题)但对我来说这有效:

$('.input-group.open').removeClass('open');
于 2014-01-02T15:38:46.543 回答
0

点击后:

// Hide mobile menu
$('.in,.open').removeClass('in open');
// Hide dropdown
$('.dropdown-menu').css('display','none');
setTimeout(function(){
    $('.dropdown-menu').css('display','');
},100);
于 2015-01-10T23:43:05.917 回答
0

在锚标记上使用 class="dropdown-toggle" ,然后当您单击锚标记时,它将关闭引导下拉菜单。

于 2015-04-13T03:37:58.230 回答
0

嘿,这个简单的 jQuery 技巧应该会有所帮助。

$(".dropdown li a").click(function(){
$(".dropdown").removeClass("open");
});
于 2015-07-21T10:21:14.640 回答
0

最简单的方法:

  $('.navbar-collapse a').click(function(){
    $('.navbar-toggle').trigger('click')
  })
于 2016-11-13T09:05:10.423 回答
0

您可以在当前的事件处理程序中使用此代码

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

在我的场景中,我在 ajax 调用完成时使用

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;
});
于 2017-11-02T08:54:23.717 回答