Bootstrap-Popover, bei Klick außerhalb ausblenden?

Lesezeit: 8 Minuten

Benutzer-Avatar
Tommy

Bootstrap-Popover verwenden, und jetzt versuche ich, diesen Code dazu zu bringen, außerhalb des Popovers zu klicken, um das Popover zu schließen:

$('body').on('click', function (e) {
    $('[data-toggle="popover"]').each(function () {
        //the 'is' for buttons that trigger popups
        //the 'has' for icons within a button that triggers a popup
        if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
            $(this).popover('hide');
        }
    });
});

Aber wenn ich diesen Teil verwende, kann ich das Popover schließen, aber ich kann nicht auf die anderen Schaltflächen klicken, hat jemand eine Idee, wie ich das machen kann?

Alle Tasten:

<a href="#" class="btn btn-xs btn-primary" data-toggle="popover">This opens popover</a>
<a href="#" class="btn btn-xs btn-primary">Other link</a> <- Doesn't work 
<a href="#" class="btn btn-xs btn-primary">Other link</a> <- Doesn't work 

  • überprüfen Sie besser Ihre z-index Ich denke, dass Popupbox etwas überwunden ist

    – Rahil Wazir

    9. Dezember 2013 um 9:13 Uhr

  • @RahilWazir Das hat ein bisschen geholfen, das Popover hat die Klasse .fade und fade in, und .fade hat opacity:0, also ist es immer noch da, aber immer noch nicht ^^ Jetzt muss ich herausfinden, wie ich die Opazität von dort entfernen kann, denn wenn ich das mache, funktioniert der Code, den ich zum Schließen habe, nicht

    – Tommi

    9. Dezember 2013 um 9:21 Uhr

  • machen Sie eine Geige, es wird hilfreich sein.

    – Rahil Wazir

    9. Dezember 2013 um 9:24 Uhr

  • Was meinst du mit Funktioniert nicht ? Können Sie eine Demo zu jsfiddle bereitstellen?

    – Irvin Dominin

    9. Dezember 2013 um 11:06 Uhr

Benutzer-Avatar
Benard Patrick

Ich habe das gefunden : http://bootply.com/99372

$('body').on('click', function (e) {
    $('[data-toggle=popover]').each(function () {
        // hide any open popovers when the anywhere else in the body is clicked
        if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
            $(this).popover('hide');
        }
    });
});

Es ist fast der gleiche Code wie du …

  • Das Problem dabei ist aus irgendeinem Grund, dass das manuell aufgerufene Popover (‘hide’) es nicht aus dem Dom entfernt, sodass das Popover-Div bleibt und alles darunter abdeckt.

    – Eric Smith

    15. Mai 2014 um 15:27 Uhr

  • Könnten Sie Ihr Problem erklären oder eine Geige erstellen?

    – BENEARD Patrick

    15. Mai 2014 um 17:10 Uhr

  • Bootstrap hat eine Version erstellt, die mein Problem behoben hat, sodass Ihre Lösung jetzt so funktioniert, wie Sie es beschrieben haben. Davor würde sich das Popover im Dom halten. Es wäre unsichtbar, behält aber immer noch sein HxB bei, wodurch alle Elemente unterhalb seines Z-Index nicht angeklickt werden können.

    – Eric Smith

    19. Mai 2014 um 14:35 Uhr

  • Funktioniert auch für Tooltip, einfach alles ändern popover Saiten für tooltip

    – simPod

    6. Mai 2015 um 22:53 Uhr

  • Ich würde empfehlen, das “Mousedown”-Ereignis anstelle des “Klicks” zu verwenden. Auf diese Weise wird das Popover auch bei langen Auswahlen oder Drag’n’Drops ausgeblendet.

    – Stepan Stepanow

    20. Januar 2017 um 13:44 Uhr

Benutzer-Avatar
Ravi

Fügen Sie einfach dieses Element hinzu, um das Popover beim nächsten Klick zu schließen.

data-trigger="focus" 

Referenz von hier:
Bootstrap-Popover

  • Möchte jemand erklären, warum diese Antwort abgelehnt wird? Es scheint mir die perfekte Antwort zu sein. Es ist kurz, spezifisch und korrekt und verweist sogar auf die offizielle Dokumentation. Ich verstehe es nicht.

    – jumps4fun

    14. Februar 2018 um 9:33 Uhr

  • Ich war nicht derjenige, der es abgelehnt hat, aber der Grund ist wahrscheinlich, dass es nicht das ist, was der Typ gefragt hat. Er (und ich) wollen, dass das Popover nur verschwindet, wenn man AUSSERHALB davon klickt. data-trigger=”focus” blendet es auch aus, wenn man hineinklickt.

    – Asaf

    26. Februar 2018 um 12:07 Uhr

  • @Asaf nein, ist es nicht … Ich möchte sowohl den Innen- als auch den Außenklick schließen, aber nur funktionieren, wenn ich nach außen klicke. Wie kann ich beide archivieren? Mit innen meinte ich die ICON was beim Klicken dazu führt, dass ein Popover erscheint. Ja, es verschwindet, wenn Sie in den Popover-Körper klicken.

    – Anshul Riyal

    29. August 2019 um 6:45 Uhr


Benutzer-Avatar
TheBugger0101

Tatsächlich benötigen Sie nicht einmal JS, da es in Bootstrap bereits eine Einstellung dafür gibt.

Sehen : http://getbootstrap.com/javascript/#dismiss-on-next-click

“Spezielles Markup erforderlich für das Schließen beim nächsten Klick. Für ein ordnungsgemäßes browser- und plattformübergreifendes Verhalten müssen Sie die <a> Etikett, nicht das <button> -Tag, und Sie müssen auch die Attribute role=”button” und tabindex einschließen.”

Ex. :

<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-toggle="popover" data-trigger="focus" title="Dismissible popover" data-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>

  • Es ist immer hilfreich, wenn Sie die relevanten (Code-)Teile aus der externen Ressource einbinden, anstatt nur darauf zu verlinken.

    – Ted Nyberg

    13. September 2016 um 14:55 Uhr

  • Obwohl dies nicht die vollständigste Antwort ist, ist dies der richtige Weg, es zu tun. Dies funktioniert jedoch nicht, wenn Sie interaktive Inhalte einfügen möchten, da alle Klicks das Popover schließen.

    – Phil Andrews

    8. November 2016 um 19:52 Uhr


  • Benötigt data-trigger=”focus” sonst funktioniert es nicht. Beispiel:

    – Dimitar Darazhanski

    21. März 2017 um 18:44 Uhr

  • Danke, deine Lösung funktioniert. Bootstrap bietet eine Standardeinstellung dafür.

    – Gautam Patadiya

    19. April 2017 um 7:10 Uhr

  • Dadurch wird das Popover beim zweiten Klick geschlossen, nicht bei einem Außenklick. Dies wird auch geschlossen, wenn ich in das Popover klicke

    – Lombas

    4. Juli 2017 um 20:17 Uhr

Versuche dies. Es schließt das Popover, wenn Sie außerhalb des Popovers klicken.

$('body').on('click', function (e) {
//did not click a popover toggle, or icon in popover toggle, or popover
if ($(e.target).data('toggle') !== 'popover' && $(e.target).parents('[data-toggle="popover"]').length === 0
    && $(e.target).parents('.popover.in').length === 0) {
    (($('[data-toggle="popover"]').popover('hide').data('bs.popover') || {}).inState || {}).click = false;
}
});

Eine andere Lösung,

<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-toggle="popover" data-trigger="focus" title="Dismissible popover" data-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>

hinzufügen tabindex=”0″ und data-trigger=”Fokus”

Popover einfach auszublenden funktioniert nicht. Sie müssen zweimal klicken, um das Popover wieder anzuzeigen.
https://github.com/twbs/bootstrap/issues/16732

Damit es für Bootstrap 3.3.6 korrekt funktioniert. Versuche dies:

$('body').on('click', function (e) {
        $('[data-toggle=popover]').each(function () {
            if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
                (($(this).popover('hide').data('bs.popover')||{}).inState||{}).click = false;
            }
        });
    });

Bootstrap 4 verwendet _activeTrigger Anstatt von inState:

$(e.target).data("bs.popover")._activeTrigger.click = false

  • Was heißt hier „inState“?

    – Vivekraj KR

    27. Februar 2019 um 9:41 Uhr

  • inState gibt den aktuellen Zustand des Popovers an. Hier setzen wir den Popover-Klickstatus mit „inState.click=false“ zurück, was sonst „true“ gewesen wäre, da wir das Click-Ereignis verwenden, um dieses Popover anzuzeigen. ‘inState.hover’ ‘inState.focus’ sind einige verfügbare Optionen.

    – SumitK

    28. Februar 2019 um 10:45 Uhr


  • Bitte stimmen Sie ab, wenn Sie dies nützlich fanden. Vivekraj KR

    – SumitK

    12. März 2019 um 6:20 Uhr

Sogar ich hatte das Problem.. und ich bin in der Lage, es loszuwerden..

Fügen Sie einfach diese Zeile in Ihren Code ein.. :

 $(this).css('display', 'none');

dh

    $('[data-toggle="popover"]').each(function () {
        //the 'is' for buttons that trigger popups
        //the 'has' for icons within a button that triggers a popup
        if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
            $(this).popover('hide');
          $('[data-toggle="popover"]').css('display','none');
        }
    });
});

Anregung: Anstatt von ‘Karosserie’ Tag, den Sie verwenden können ‘dokumentieren’

  • Was heißt hier „inState“?

    – Vivekraj KR

    27. Februar 2019 um 9:41 Uhr

  • inState gibt den aktuellen Zustand des Popovers an. Hier setzen wir den Popover-Klickstatus mit „inState.click=false“ zurück, was sonst „true“ gewesen wäre, da wir das Click-Ereignis verwenden, um dieses Popover anzuzeigen. ‘inState.hover’ ‘inState.focus’ sind einige verfügbare Optionen.

    – SumitK

    28. Februar 2019 um 10:45 Uhr


  • Bitte stimmen Sie ab, wenn Sie dies nützlich fanden. Vivekraj KR

    – SumitK

    12. März 2019 um 6:20 Uhr

Benutzer-Avatar
Dipiks

Ich codiere nur meine eigene Variante Ihrer Antwort, weil ich ein Problem hatte, bei dem ich beim Versuch, ein Popover nach einem Auswärtsklick erneut zu öffnen, zweimal auf die Schaltfläche klicken musste.

Das Ziel dieses Codes ist es, einen Klick auf die Schaltfläche zu simulieren, die das Popover aktiviert.

Also da ist der Code:

$('html').on('click', function(e) {
    $('[data-toggle="popover"]').each(function() { //Loop for everything containing a data-toggle="popover"
        if ($(this).attr('aria-describedby') != null ) { //Check if the popover is active / contain an aria-describedby with a value
            var id = $(this).attr('aria-describedby'); //Put the value in a variable
            if (!$(e.target).closest(".popover-content").length && $(e.target).attr("aria-describedby") != id && !$(e.target).closest('[aria-describedby="'+id+'"').length) { //Look if the click is a child of the popover box or if it's the button itself or a child of the button
                $('[aria-describedby="'+id+'"]').trigger( "click" ); //trigger a click as if you clicked the button
            }
        }
    });
});

  • Diese Lösung funktioniert fast immer. Ich denke, ein Stoppropagation kann es nicht blockieren. Das Problem ist, dass diese Funktion für jeden Klick, den Sie machen, für jedes Popover eine Schleife durchläuft. Eine andere Lösung kann besser sein, wie die eingebaute. In einigen Fällen können Sie Probleme mit ihnen haben, also wird dieser Code die Arbeit erledigen.

    – Eli Morin

    7. Juni 2017 um 15:51 Uhr


1158210cookie-checkBootstrap-Popover, bei Klick außerhalb ausblenden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy