【问题标题】:BootStrap3 keep the dropdown menu open after click on the itemBootStrap3点击项目后保持下拉菜单打开
【发布时间】:2026-01-15 22:55:01
【问题描述】:

我正在使用 Bootstrap 3.0,它具有出色的下拉菜单。

如果我在下拉菜单之外点击,菜单会消失,没关系。

但是当我点击一个下拉菜单项时,菜单消失了。我不希望这种情况发生,并且没有控制切换行为的选项。我希望菜单在单击其中一项后保持打开状态,例如 Facebook 通知菜单。

我想我必须修改 Bootstrap 源代码,而我并不想这样做。所以在接触源代码之前,我想知道有什么好的解决方法吗?如果没有,我应该如何更改对 Bootstrap 的影响最小的来源?

感谢您的任何想法。

【问题讨论】:

标签: twitter-bootstrap twitter-bootstrap-3 drop-down-menu


【解决方案1】:

在原版 JS 中

document.getElementById('myDropdown').addEventListener('click', function (event) {
    event.stopPropagation();
  });

【讨论】:

    【解决方案2】:

    接受的答案非常有帮助。我想提供另一种观点 - 当仅单击某些项目时下拉菜单应保持打开状态。

    // A utility for keeping a Bootstrap drop down menu open after a link is
    // clicked
    //
    // Usage:
    //
    //   <div class="dropdown">
    //     <a href="" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
    //       Dropdown trigger <span class="caret"></span>
    //     </a>
    //
    //     <ul class="dropdown-menu" aria-labelledby="dLabel">
    //       <li><a href="">Edit</a></li>
    //       <li><a href="" keep-menu-open="true">Delete</a></li>
    //     </ul>
    //  </div>
    
    $(".dropdown .dropdown-menu a").on("click", function(e) {
      var keepMenuOpen = $(this).data("keep-menu-open"),
          $dropdown = $(this).parents(".dropdown");
    
      $dropdown.data("keep-menu-open", keepMenuOpen);
    });
    
    $(".dropdown").on("hide.bs.dropdown", function(e) {
      var keepMenuOpen = $(this).data("keep-menu-open");
    
      $(this).removeData("keep-menu-open");
    
      return keepMenuOpen !== true;
    });
    

    【讨论】:

      【解决方案3】:

      这是在单击后保持下拉菜单打开的一种方法...

      $('#myDropdown').on('hide.bs.dropdown', function () {
          return false;
      });
      

      演示:http://www.bootply.com/116350

      另一种选择是像这样处理点击事件..

      $('#myDropdown .dropdown-menu').on({
          "click":function(e){
            e.stopPropagation();
          }
      });
      

      演示:http://www.bootply.com/116581

      【讨论】:

      • 非常感谢,但是当我尝试时,即使单击菜单外,菜单也会保持打开状态......并且演示链接已损坏
      • 尝试演示链接时会发生什么?怎么破的?
      • 哦,几小时前,它说发生了一些错误。现在它正在工作。但问题依然存在。
      • 第二个选项非常适合点击事件,对触摸有什么想法吗?我已经尝试过 touchstart,但都没有成功。
      • 这工作并且在多级下拉菜单中保持下拉菜单始终打开,但是如果用户想要关闭下拉菜单怎么办​​或者你可能想要允许它在单击下拉列表本身时关闭?检查thisthis,希望对某人有所帮助。