首頁  >  文章  >  web前端  >  如何防止 Bootstrap 下拉選單在點擊內部時關閉?

如何防止 Bootstrap 下拉選單在點擊內部時關閉?

Barbara Streisand
Barbara Streisand原創
2024-10-25 12:48:02624瀏覽

How to Prevent Bootstrap Dropdown from Closing When Clicking Inside?

防止點擊下拉選單內部時關閉

在Twitter Bootstrap 中,下拉選單會在點擊(即使是點擊選單內部)時關閉。為了避免這種情況,可以為下拉式選單附加一個 click 事件處理程序並新增著名的 event.stopPropagation()。

<code class="html"><ul class="nav navbar-nav">
  <li class="dropdown mega-dropdown">
    <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
      <i class="fa fa-list-alt"></i> Menu item 1
      <span class="fa fa-chevron-down pull-right"></span>
    </a>
    <ul class="dropdown-menu mega-dropdown-menu">
      <li>
        <div id="carousel" class="carousel slide" data-ride="carousel">
          <ol class="carousel-indicators">
            <li data-slide-to="0" data-target="#carousel"></li>
            <li class="active" data-slide-to="1" data-target="#carousel"></li>
          </ol>
          <div class="carousel-inner">
            <div class="item">
              <img alt="" class="img-rounded" src="img1.jpg">
            </div>
            <div class="item active">
              <img alt="" class="img-rounded" src="img2.jpg">
            </div>
          </div>
          <a data-slide="prev" role="button" href="#carousel" class="left carousel-control">
            <span class="glyphicon glyphicon-chevron-left"></span>
          </a>
          <a data-slide="next" role="button" href="#carousel" class="right carousel-control">
            <span class="glyphicon glyphicon-chevron-right"></span>
          </a>
        </div>
      </li>
    </ul>
  </li>
</ul></code>

這個方法看起來很容易,也很常見,但是由於carousel-controls(以及carousel indicators)的事件處理程序委託給了document 對象,所以對這些元素(prev/next 控件等)的點擊事件將被「忽略」。

<code class="js">$('ul.dropdown-menu.mega-dropdown-menu').on('click', function(event){
    // 不会向document 节点传播事件
    // 所以委托的事件不会被触发
    event.stopPropagation();
});</code>

依賴Twitter Bootstrap 的dropdown hide/hidden 事件不是解決方案,原因如下:

  • 這兩個事件處理程序提供的事件物件不引用所點擊的元素。
  • 無法控制下拉式選單的內容,因此無法新增 flag 類別或屬性。

以下是正常行為的小提琴演示和添加了 event.stopPropagation() 的小提琴演示。

更新

謝謝 Roman 的回答。我也找到了另一個答案,如下:

<code class="js">$(document).on('click', 'someyourContainer .dropdown-menu', function (e) {
  e.stopPropagation();
});</code>

以上是如何防止 Bootstrap 下拉選單在點擊內部時關閉?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn