如何防止 Bootstrap 4 下拉菜單在輸入元素點擊時顯示?

科科伊

以下是一個簡單的引導下拉菜單,但切換元素是文本輸入。我不希望下拉菜單顯示在click事件上,而是希望在用戶輸入時顯示它,以便我可以根據該輸入動態填充菜單。

下面的click事件處理程序防止在用戶在 input 元素中輸入任何內容之前input顯示下拉菜單,並且當有任何輸入時,處理程序顯示下拉菜單。然而,一旦用戶在元素中輸入了一些東西,下拉菜單就會顯示出來。之後,click輸入元素上的任何後續內容都會顯示下拉菜單,並且click即使用戶清除所有輸入處理程序也會運行但不會阻止下拉菜單的顯示。

Bootstrap 是否附加了任何新事件,或者我對事件的理解不是很好?我怎麼能讓這個工作?

$('#exampleFormControlInput1').on('click', e=>{
  e.preventDefault();
  e.stopPropagation();
  console.log('Dropdown prevented');
});

$('#exampleFormControlInput1').on('input', e=>{
  $('#exampleFormControlInput1').dropdown('show');
});
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>

<div class="container">
  <div class="dropdown">
    <label for="exampleFormControlInput1" class="form-label" id="dropdownMenuButton1">Input with autocomplete</label>
    <input type="text" class="form-control" id="exampleFormControlInput1" placeholder="Search for something" data-toggle="dropdown" aria-expanded="false">
    <ul class="dropdown-menu" aria-labelledby="exampleFormControlInput1">
      <li><a class="dropdown-item" href="#">Action</a></li>
      <li><a class="dropdown-item" href="#">Another action</a></li>
      <li><a class="dropdown-item" href="#">Something else here</a></li>
    </ul>
  </div>
</div>

格萊布·凱馬斯基

您不需要添加新的點擊處理程序。改用 Bootstrap 的事件和方法:https : //getbootstrap.com/docs/4.6/components/dropdowns/#methods

為了防止下拉菜單在輸入字段為空時打開,請阻止該show.bs.dropdown事件。注意:

所有 dropdown 事件都在.dropdown-menu的父元素上觸發並具有一個relatedTarget屬性,其值是切換的錨元素。

要在字段中出現數據時顯示列表,並在字段變空時隱藏,可以使用該.dropdown()方法。

https://codepen.io/glebkema/pen/RwZMNzE?editors=1011

$(function() {

  // prevent the list from opening by clicking on an empty field
  $(".dropdown").on("show.bs.dropdown", function(e) {
    if (!e.relatedTarget.value) {
      return false;
    }
  });

  // handle changes in the input field
  $("#exampleFormControlInput1").on("input", function(e) {
    if (this.value) {
      $(this).dropdown("show");
    } else {
      $(this).dropdown("hide");
    }
  });
});
<div class="container">
  <div class="dropdown">
    <label for="exampleFormControlInput1" class="form-label" id="dropdownMenuButton1">Input with autocomplete</label>
    <input type="text" class="form-control" id="exampleFormControlInput1" placeholder="Search for something" data-toggle="dropdown" aria-expanded="false">
    <ul class="dropdown-menu" aria-labelledby="exampleFormControlInput1">
      <li><a class="dropdown-item" href="#">Action</a></li>
      <li><a class="dropdown-item" href="#">Another action</a></li>
      <li><a class="dropdown-item" href="#">Something else here</a></li>
    </ul>
  </div>
</div>

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Bootstrap 4 - 單擊下拉按鈕時防止打開模態

Bootstrap 4-如何防止折叠菜单折叠导航中的所有元素

如何防止我的購物車菜單在空時顯示零?

當我單擊漢堡菜單時,為什麼我在 Bootstrap 中的導航欄內容不顯示?

如何使用 bootstrap 4 重新排序元素?

如何分离这些 Bootstrap 4 行元素?

如何在 JavaScript 中單擊按鈕時顯示元素

防止 materializecss 下拉菜單在內部單擊時關閉?

為什麼我的 Bootstrap 下拉菜單沒有顯示?

如何防止导航元素包装在Bootstrap中

如何構建僅在用戶單擊單擊按鈕時才顯示輸出的閃亮應用程序?

Bootstrap v4:防止双击折叠

如何防止表格超过Bootstrap 4中的卡身宽度?

如何將類應用於下拉菜單中單擊的元素?

如何防止Bootstrap Tootip崩溃?

如何更改bootstrap 4 selectpicker的默认下拉颜色?

如何在Bootstrap 4的下拉菜单中删除箭头?

如何更改Bootstrap 4下拉颜色?

如何使用 bootstrap 4 定位下拉菜单?

如何根據下拉菜單選擇顯示不同的內容?

Bootstrap 4 - 在頁腳文本之後僅顯示當前斷點(內聯)

製作一個下拉菜單以點擊而不是懸停來顯示

如何启用Bootstrap 4 Flex?

如何使用Bootstrap 4居中

如何划分Bootstrap 4卡

如何在Bootstrap 4中均匀间隔Navbar元素

如何使用Bootstrap 4 Beta在小屏幕上隐藏元素

如何使用bootstrap 4使textarea元素填充所有高度?

在 bootstrap 4 中對齊標籤和輸入的效果如何