Heim  >  Artikel  >  Web-Frontend  >  Wie kann verhindert werden, dass Bootstrap-Dropdown-Menüs bei internen Klicks geschlossen werden, während die Funktionalität des delegierten Ereignishandlers erhalten bleibt?

Wie kann verhindert werden, dass Bootstrap-Dropdown-Menüs bei internen Klicks geschlossen werden, während die Funktionalität des delegierten Ereignishandlers erhalten bleibt?

Barbara Streisand
Barbara StreisandOriginal
2024-10-28 00:14:29841Durchsuche

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

Dropdowns verwalten: Schließen von Menüs bei internen Klicks verhindern

Die Herausforderung bei Twitter Bootstrap-Dropdowns besteht darin, dass sie dazu neigen, sich bei jedem Klick zu schließen, auch wenn dieser im Menü selbst erfolgt. Um diese Einschränkung zu überwinden, ist es üblich, mit der einfachen Funktion event.stopPropagation() einen Event-Handler an das Dropdown-Menü anzuhängen.

Diese Lösung hat jedoch einen Nachteil: Delegierte Event-Handler für Elemente wie Karussell-Steuerelemente werden unwirksam. Um dies zu verstehen, betrachten Sie den folgenden Code:

<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>

Durch das Anhängen des Event-Handlers an ul.dropdown-menu.mega-dropdown-menu wollen wir verhindern, dass das Menü bei jedem Klick geschlossen wird darin. Allerdings werden delegierte Ereignishandler, die im Dokumentobjekt für Elemente wie Karussellsteuerelemente registriert sind, unwirksam, was dazu führt, dass sie keine Ereignisse mehr auslösen können.

Lösung:

Um dieses Problem zu beheben Problem können Sie den folgenden Code verwenden:

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

Durch die Verwendung von $(document).on('click', ...) stellen Sie sicher, dass der Ereignishandler an das gesamte Dokumentobjekt angehängt ist. Dadurch können Klicks im Dropdown-Menü abgefangen werden, während delegierte Ereignishandler weiterhin ordnungsgemäß funktionieren.

Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass Bootstrap-Dropdown-Menüs bei internen Klicks geschlossen werden, während die Funktionalität des delegierten Ereignishandlers erhalten bleibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn