Как я могу настроить выпадающий список начальной загрузки? - PullRequest
0 голосов
/ 22 октября 2019

Я новичок в разработке внешнего интерфейса, я хотел бы изменить поведение выпадающего меню начальной загрузки. В частности, я хотел бы активировать второй уровень нажатием кнопки мыши, а не при наведении курсора. Также элементы первого уровня должны быть проверяемыми, теперь, если я нажимаю на них, раскрывающийся список закрывается.

Я использую этот код: https://bootsnipp.com/snippets/kM4Q

1 Ответ

0 голосов
/ 22 октября 2019

Вы пометили этот вопрос тегом bootstrap-4, но добавили ссылку только с файлами начальной загрузки 3, поэтому в своем ответе я решил использовать эти файлы. Это решение для Bootstrap 3, а не 4 .

Чтобы внести это изменение, вы можете использовать jQuery, работающий с функцией toggleClass , преобразующий также это правило CSS:

.dropdown-submenu:hover>.dropdown-menu {
    display: block;
}

в этом:

.dropdown-submenu > .dropdown-menu.active {
    display: block;
}

Чтобы вернуться к исходной ситуации, когда вы закрываете выпадающее меню, я добавил эту функцию, используя Событие выпадающего списка :

  $('#mydropdown').on('hidden.bs.dropdown', function () {
    $('ul', $(this)).removeClass("active");
  })

Это код:

$(document).ready(function(){
   $('.dropdown-submenu > a').on("click", function(e){
      $(this).next('ul').toggleClass("active");

      e.preventDefault();
      e.stopPropagation();   
   });
   
   $('#mydropdown').on('hidden.bs.dropdown', function () {
      $('ul', $(this)).removeClass("active");
   })
});
.dropdown-submenu {
    position: relative;
}

.dropdown-submenu>.dropdown-menu {
    top: 0;
    left: 100%;
    margin-top: -6px;
    margin-left: -1px;
    -webkit-border-radius: 0 6px 6px 6px;
    -moz-border-radius: 0 6px 6px;
    border-radius: 0 6px 6px 6px;
}

.dropdown-submenu > .dropdown-menu.active {
    display: block;
}

.dropdown-submenu>a:after {
    display: block;
    content: " ";
    float: right;
    width: 0;
    height: 0;
    border-color: transparent;
    border-style: solid;
    border-width: 5px 0 5px 5px;
    border-left-color: #ccc;
    margin-top: 5px;
    margin-right: -10px;
}

.dropdown-submenu:hover>a:after {
    border-left-color: #fff;
}

.dropdown-submenu.pull-left {
    float: none;
}

.dropdown-submenu.pull-left>.dropdown-menu {
    left: -100%;
    margin-left: 10px;
    -webkit-border-radius: 6px 0 6px 6px;
    -moz-border-radius: 6px 0 6px 6px;
    border-radius: 6px 0 6px 6px;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>


<div class="container">
   <div class="row">
      <div id="mydropdown">
         <div class="dropdown">
            <a id="dLabel" role="button" data-toggle="dropdown" class="btn btn-primary" data-target="dropdown-menu" href="#">
            Dropdown <span class="caret"></span>
            </a>
            <ul class="dropdown-menu multi-level" role="menu" aria-labelledby="dropdownMenu">
               <li><a href="#">Some action</a></li>
               <li><a href="#">Some other action</a></li>
               <li class="divider"></li>
               <li class="dropdown-submenu">
                  <a tabindex="-1" href="#">Hover me for more options</a>
                  <ul class="dropdown-menu">
                     <li><a tabindex="-1" href="#">Second level</a></li>
                     <li class="dropdown-submenu">
                        <a href="#">Even More..</a>
                        <ul class="dropdown-menu">
                           <li><a href="#">3rd level</a></li>
                           <li><a href="#">3rd level</a></li>
                        </ul>
                     </li>
                     <li><a href="#">Second level</a></li>
                     <li><a href="#">Second level</a></li>
                  </ul>
               </li>
            </ul>
         </div>
      </div>
   </div>
</div>
...