ホームページ  >  記事  >  ウェブフロントエンド  >  委任されたイベント ハンドラーの機能を維持しながら、ブートストラップ ドロップダウンが内部クリックで閉じないようにするにはどうすればよいですか?

委任されたイベント ハンドラーの機能を維持しながら、ブートストラップ ドロップダウンが内部クリックで閉じないようにするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-28 00:14:29772ブラウズ

How to Prevent Bootstrap Dropdowns from Closing on Internal Clicks While Maintaining Delegated Event Handler Functionality?

ドロップダウンの管理: 内部クリックでメニューが閉じるのを防ぐ

Twitter Bootstrap ドロップダウンの課題は、メニュー自体内で行われたものも含め、あらゆるクリックで閉じる傾向があることです。この制限を克服するには、単純な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">
          <!-- Carousel content -->
        </div>
      </li>
    </ul>
  </li>
</ul></code>
<code class="javascript">$('ul.dropdown-menu.mega-dropdown-menu').on('click', function(event){
    // The event won't be propagated up to the document NODE and 
    // therefore delegated events won't be fired
    event.stopPropagation();
});</code>

イベント ハンドラーを ul.dropdown-menu.mega-dropdown-menu にアタッチすることで、クリック時にメニューが閉じないようにします。その中で。ただし、カルーセル コントロールなどの要素のドキュメント オブジェクトに登録されている委任されたイベント ハンドラーは無効になり、イベントのトリガーに失敗します。

解決策:

これを解決するには

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

$(document).on('click', ...) を使用すると、イベント ハンドラーがドキュメント オブジェクト全体に確実にアタッチされます。これにより、委任されたイベント ハンドラーが正しく機能しながら、ドロップダウン メニュー内のクリックをインターセプトできるようになります。

以上が委任されたイベント ハンドラーの機能を維持しながら、ブートストラップ ドロップダウンが内部クリックで閉じないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。