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 サイトの他の関連記事を参照してください。