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

时间:2017-07-19 01:32:45

标签: javascript html css twitter-bootstrap-3

我对使用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

但这给了我很多时间。我注意到有两个特定的行为:

  1. 当我点击下拉列表,然后单击可折叠div(HTML)后,下拉列表消失。当点击下拉列表时,它会显示出来。
  2. 当显示下拉列表具有可折叠div时,所有具有可折叠面板主体的子项都不会出现。
  3. 你能帮我弄清楚所需的变化在哪里以及我做错了什么?任何指针都表示赞赏。

    谢谢!

1 个答案:

答案 0 :(得分: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>