Bootstrap4 Автоматическое сворачивание выпадающего меню при выборе элемента

Это расширенный вопрос, с которым я столкнулся после моего предыдущего вопроса.

Проблема заключается в том, что когда кто-то нажимает на стрелку, чтобы отобразить расширенный поиск, он выпадает из формы, как ожидалось. Однако в тот момент, когда кто-то нажимает на выпадающий список, все выпадающее меню само по себе разрушается.

Я пытался выяснить, какой элемент / триггер вызывает эту проблему, и посмотреть, есть ли способ обойти это, но у меня нет никакого прогресса вообще

Вот что я наблюдал до сих пор

  1. [ Ожидается ] Если пользователь щелкнул за пределами области выпадающего меню, меню сворачивается
  2. [ Неожиданно ] Если пользователь щелкнул любой из пробелов в раскрывающемся меню, меню по-прежнему сворачивается
  3. [ Ожидается ], если пользователь нажал на текстовое поле, флажок, radiobox, textarea, он должен иметь возможность печатать и вводить необходимые тексты.
  4. [ Неожиданно ] Если пользователь щелкнул меню выбора, раскрывающееся меню мгновенно сворачивается

Я опустил пример кода ниже, чтобы продемонстрировать мой вопрос.

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
    <div class="container">
      <div class="row">
        <div class="col-12">
          <div class="input-group dropdown">
            <input type="text" class="form-control" id="project_search" placeholder="search ...">
            <div class="input-group-append">
              <div class="btn-group">
                <button class="btn bg-primary text-white" type="button">Search</button>
                <button class="btn bg-primary text-white dropdown-toggle dropdown-toggle-split" id="searchAdvancedFilter" data-toggle="dropdown" data-boundary="window" aria-haspopup="true" aria-expanded="false">
                  <span class="caret"></span>
                  <span class="sr-only">Toggle Dropdown</span>
                </button>
                <div class="dropdown-menu dropdown-menu-right p-3 w-100" aria-labelledby="searchAdvancedFilter">
                  <h6 class="dropdown-header">Advanced Settings</h6>
                  <div class="dropdown-divider"></div>
                  <div class="form-group">
                    <label for="option">Option Header</label>
                    <select class="form-control" id="option" name="option">
                      <option>Pick an option</option>
                      <option value=1>Option 1</option>
                      <option value=2>Option 2</option>
                    </select>
                  </div>
                  <div class="form-group">
                    <label for="inputtext">Input Header</label>
                    <input type="text" class="form-control" id="inputtext" name="inputtext">
                  </div>
                  <div class="form-group">
                    <label for="inputcb">Checkbox Header</label>
                    <input type="checkbox" class="form-control" id="inputcb" name="inputcb">
                  </div>
                  <div class="form-group">
                    <label for="inputradio">Radio Header</label>
                    <input type="radio" class="form-control" id="inputradio" name="inputradio">
                  </div>
                  <div class="form-group">
                    <label for="ta">TextArea Header</label>
                    <textarea class="form-control" id="ta" name="ta"></textarea>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>

1 ответ

Решение

Всплывающее меню Bootstrap всегда закрывается при нажатии, кроме случаев, когда <form> используется. Чтобы предотвратить закрытие при нажатии, нужно использовать <form> элемент внутри выпадающего...

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>

<div class="container">
<div class="row">
    <div class="col-12">
        <div class="input-group dropdown">
            <input type="text" class="form-control" id="project_search" placeholder="search ...">
            <div class="input-group-append">
                <div class="btn-group">
                    <button class="btn bg-primary text-white" type="button">Search</button>
                    <button class="btn bg-primary text-white dropdown-toggle dropdown-toggle-split" id="searchAdvancedFilter" data-toggle="dropdown" data-boundary="window" aria-haspopup="true" aria-expanded="false">
                        <span class="caret"></span>
                        <span class="sr-only">Toggle Dropdown</span>
                    </button>
                    <div class="dropdown-menu dropdown-menu-right p-3 w-100" aria-labelledby="searchAdvancedFilter">
                        <h6 class="dropdown-header">Advanced Settings</h6>
                        <div class="dropdown-divider"></div>
                        <form>
                        <div class="form-group">
                            <label for="option">Option Header</label>
                            <select class="form-control" id="option" name="option">
                                <option>Pick an option</option>
                                <option value="1">Option 1</option>
                                <option value="2">Option 2</option>
                            </select>
                        </div>
                        <div class="form-group">
                            <label for="inputtext">Input Header</label>
                            <input type="text" class="form-control" id="inputtext" name="inputtext">
                        </div>
                        <div class="form-group">
                            <label for="inputcb">Checkbox Header</label>
                            <input type="checkbox" class="form-control" id="inputcb" name="inputcb">
                        </div>
                        <div class="form-group">
                            <label for="inputradio">Radio Header</label>
                            <input type="radio" class="form-control" id="inputradio" name="inputradio">
                        </div>
                        <div class="form-group">
                            <label for="ta">TextArea Header</label>
                            <textarea class="form-control" id="ta" name="ta"></textarea>
                        </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
</div>

https://www.codeply.com/go/18ACVL2uzn


Другой вариант - использовать jQuery. stopPropagation() метод: https://www.codeply.com/go/4dVvDDpChW

$('.dropdown-menu').click(function(e) {
    e.stopPropagation();
});
Другие вопросы по тегам