[Bootstrap]- Dropdown 与 Collapse 一起使用时的奇怪行为

Posted

技术标签:

【中文标题】[Bootstrap]- Dropdown 与 Collapse 一起使用时的奇怪行为【英文标题】:[Bootstrap]- Odd behavior when Dropdown used with Collapse 【发布时间】:2017-07-19 01:32:44 【问题描述】:

我对使用 Bootstrap 进行开发相当陌生,我一直在尝试创建一个具有可折叠功能的下拉菜单,这样任何带有下拉菜单的子项都可以显示在可折叠容器中。

我在网上找到了一些代码,几乎可以解释我想要完成的工作:https://www.bootply.com/1u6VW4bsrR

我尝试写下几行 html 代码来完成与上面类似的操作:

<div class="dropdown">
  <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Dropdown Example
  <span class="caret"></span></button>
  <ul class="dropdown-menu">
     <li>
       <a data-toggle="collapse" href="#collapse1">HTML</a>
       <div id="collapse1" class="panel-collapse collapse">
         <div class="panel-body">
           <ul class='dropdown-menu sub-menu'>
             <li><a>Type 1</a></li>
             <li><a>Type 2</a></li>
           </ul>
         </div>
       </div>
    </li>
    <li><a href="#">CSS</a></li>
    <li><a href="#">javascript</a></li>
 </ul>
</div>

Codepen 链接:https://codepen.io/anon/pen/weLKzp/?editors=1010

但这让我很难过。我注意到了两种特定的行为:

    当我点击下拉菜单并点击可折叠 div(HTML) 后,下拉菜单消失。当点击下拉菜单时,它会显示出来。 当下拉菜单显示为具有可折叠 div 时,所有具有可折叠面板主体的子项都不会出现。

您能帮我找出需要更改的地方以及我做错了什么吗?任何指针表示赞赏。

谢谢!

【问题讨论】:

【参考方案1】:

在这个例子中,我为多级下拉菜单创建了一个 .dropdown-submenu 类

请注意,我添加了 jQuery 以在单击时打开多级下拉菜单。

.dropdown-submenu 
    position: relative;


.dropdown-submenu .dropdown-menu 
    top: 0;
    left: 100%;
    margin-top: -1px;
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>



  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<div class="container">
  
  <div class="dropdown">
    <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">Tutorials
    <span class="caret"></span></button>
    <ul class="dropdown-menu">
      <li><a tabindex="-1" href="#">HTML</a></li>
      <li><a tabindex="-1" href="#">CSS</a></li>
      <li class="dropdown-submenu">
        <a class="test" tabindex="-1" href="#">New dropdown <span class="caret"></span></a>
        <ul class="dropdown-menu">
          <li><a tabindex="-1" href="#">2nd level dropdown</a></li>
          <li><a tabindex="-1" href="#">2nd level dropdown</a></li>
          <li class="dropdown-submenu">
            <a class="test" href="#">Another dropdown <span class="caret"></span></a>
            <ul class="dropdown-menu">
              <li><a href="#">3rd level dropdown</a></li>
              <li><a href="#">3rd level dropdown</a></li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </div>
</div>


<script>
$(document).ready(function()
  $('.dropdown-submenu a.test').on("click", function(e)
    $(this).next('ul').toggle();
    e.stopPropagation();
    e.preventDefault();
  );
);
</script>

【讨论】:

以上是关于[Bootstrap]- Dropdown 与 Collapse 一起使用时的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

Keep-bootstrap-3-dropdown-open-when-clicked

AngularJs的UI组件ui-Bootstrap分享——Buttons和Dropdown

Bootstrap源码分析之dropdown

AngularJs的UI组件ui-Bootstrap分享——Buttons和Dropdown

AngularJs的UI组件ui-Bootstrap分享——Buttons和Dropdown

Bootstrap 学习之js插件(下拉菜单(Dropdown)插件)