Können wir Popovers dazu bringen, auf die gleiche Weise wie Modals entlassen zu werden, d. H. sie schließen, wenn der Benutzer irgendwo außerhalb von ihnen klickt?
Leider kann ich nicht einfach echtes Modal anstelle von Popover verwenden, da Modal Position bedeutet: fest und das wäre kein Popover mehr. :((
twitter-bootstrap
popover
Ante Vrli
quelle
quelle
data-trigger="hover"
unddata-trigger="focus"
sind eine integrierte Alternative zum Schließen des Popovers, wenn Sie den Toggle nicht verwenden möchten. Meiner Meinung nachdata-trigger="hover"
bietet die beste Benutzererfahrung ... es besteht keine Notwendigkeit, zusätzlichen .js-Code zu schreiben ...Antworten:
Update: Eine etwas robustere Lösung: http://jsfiddle.net/mattdlockyer/C5GBU/72/
Für Schaltflächen, die nur Text enthalten:
Für Schaltflächen mit Symbolen verwenden (dieser Code hat einen Fehler in Bootstrap 3.3.6, siehe den Fix unten in dieser Antwort)
Für JS-generierte Popover Verwenden Sie
'[data-original-title]'
anstelle von'[data-toggle="popover"]'
Vorsichtsmaßnahme: Mit der obigen Lösung können mehrere Popover gleichzeitig geöffnet werden.
Ein Popover nach dem anderen bitte:
Update: Bootstrap 3.0.x, siehe Code oder Geige http://jsfiddle.net/mattdlockyer/C5GBU/2/
Dies behandelt das Schließen von Popovers, die bereits geöffnet und nicht angeklickt sind oder deren Links nicht angeklickt wurden.
Update: Bootstrap 3.3.6, siehe Geige
Behebt ein Problem, bei dem nach dem Schließen 2 Klicks zum erneuten Öffnen erforderlich sind
Update: Unter der Bedingung der vorherigen Verbesserung wurde diese Lösung erreicht. Beheben Sie das Problem von Doppelklick und Ghost Popover:
quelle
$(document)
statt$('body')
da manchmalbody
erstreckt sich das nicht über die gesamte Seite.'[data-toggle="popover"]'
, was nicht mit JavaScript generierten Popovers funktioniert, habe ich'[data-original-title]'
als Selektor verwendet.Dadurch werden alle Popovers geschlossen, wenn Sie auf eine beliebige Stelle außer auf ein Popover klicken
UPDATE für Bootstrap 4.1
quelle
Die einfachste und ausfallsicherste Version funktioniert mit jeder Bootstrap-Version.
Demo: http://jsfiddle.net/guya/24mmM/
Demo 2: Nicht schließen, wenn Sie in den Popover-Inhalt klicken http://jsfiddle.net/guya/fjZja/
Demo 3: Mehrere Popover: http://jsfiddle.net/guya/6YCjW/
Durch einfaches Aufrufen dieser Leitung werden alle Popover geschlossen:
Schließen Sie alle Popover, wenn Sie mit diesem Code nach draußen klicken:
Das obige Snippet fügt dem Körper ein Klickereignis hinzu. Wenn der Benutzer auf ein Popover klickt, verhält es sich wie gewohnt. Wenn der Benutzer auf etwas klickt, das kein Popover ist, werden alle Popover geschlossen.
Es funktioniert auch mit Popovers, die mit Javascript initiiert wurden, im Gegensatz zu einigen anderen Beispielen, die nicht funktionieren. (siehe Demo)
Wenn Sie beim Klicken in den Popover-Inhalt nicht schließen möchten, verwenden Sie diesen Code (siehe Link zur 2. Demo):
quelle
!$(e.target).closest('.popover.in').length
wäre effizienter als!$(e.target).parents().is('.popover.in')
.Mit Bootstrap 2.3.2 können Sie den Trigger auf "Fokus" setzen und es funktioniert einfach:
quelle
Dies ist im Grunde nicht sehr komplex, aber es gibt einige Überprüfungen, um Störungen zu vermeiden.
Demo (jsfiddle)
quelle
popover()
Klick zu tun, anstatt mit dem Mauszeiger darüber zu fahren?stopPropagation()
über das Ereignis an den Click - Handler übergeben (wenn nicht, das Versteck verstecken Handler sofort den popover). Demo (jsfiddle)Keine der vermeintlich hochstimmigen Lösungen hat bei mir richtig funktioniert. Jedes führt zu einem Fehler, wenn das Popover nach dem ersten Öffnen und Schließen (durch Klicken auf andere Elemente) zum ersten Mal wieder geöffnet wird, bis Sie zwei erstellen Klicks auf den auslösenden Link anstatt auf einen machen.
Also habe ich es leicht modifiziert:
quelle
Ich habe eine jsfiddle gemacht, um dir zu zeigen, wie es geht:
http://jsfiddle.net/3yHTH/
Die Idee ist, das Popover anzuzeigen, wenn Sie auf die Schaltfläche klicken, und das Popover auszublenden, wenn Sie außerhalb der Schaltfläche klicken.
HTML
JS
quelle
jsfiddle bootstrap
und es gab mir das Skelett von Bootstrap CSS + JS in JSfiddle.Fügen Sie dieses Attribut einfach dem Element hinzu
quelle
Dies wurde vor gefragt hier . Die gleiche Antwort, die ich damals gegeben habe, gilt immer noch:
Ich hatte ein ähnliches Bedürfnis und fand diese tolle kleine Erweiterung des Twitter Bootstrap Popover von Lee Carmichael namens BootstrapX - Clickover . Er hat hier auch einige Anwendungsbeispiele . Grundsätzlich wird das Popover in eine interaktive Komponente umgewandelt, die geschlossen wird, wenn Sie auf eine andere Stelle auf der Seite oder auf eine Schaltfläche zum Schließen innerhalb des Popovers klicken. Dies ermöglicht auch das gleichzeitige Öffnen mehrerer Popover und eine Reihe weiterer nützlicher Funktionen.
quelle
Das ist spät zur Party ... aber ich dachte, ich würde es teilen. Ich liebe das Popover, aber es hat so wenig eingebaute Funktionalität. Ich habe eine Bootstrap-Erweiterung .bubble () geschrieben, die genau das ist, was Popover sein soll. Vier Möglichkeiten zu entlassen. Klicken Sie nach draußen, schalten Sie den Link um, klicken Sie auf das X und drücken Sie die Esc-Taste.
Es wird automatisch positioniert, sodass es nie von der Seite verschwindet.
https://github.com/Itumac/bootstrap-bubble
Dies ist keine unentgeltliche Eigenwerbung ... Ich habe so oft in meinem Leben den Code anderer Leute gepackt, dass ich meine eigenen Anstrengungen anbieten wollte. Probieren Sie es aus und sehen Sie, ob es für Sie funktioniert.
quelle
Laut http://getbootstrap.com/javascript/#popovers ,
Verwenden Sie den Fokus-Trigger, um Popover beim nächsten Klick des Benutzers zu schließen.
quelle
<a>
Tag verwenden, nicht das<button>
Tag, und Sie müssen auch dasrole="button"
und einschließentabindex
Attribute. " Haben Sie es mit diesen Spezifikationen versucht?Modifizierte akzeptierte Lösung. Was ich erlebt habe war, dass einige Popover, nachdem sie ausgeblendet wurden, zweimal angeklickt werden mussten, um wieder angezeigt zu werden. Folgendes habe ich getan, um sicherzustellen, dass Popover ('hide') nicht für bereits versteckte Popover aufgerufen wird.
quelle
Fügen Sie dieses Attribut einfach dem HTML-Element hinzu, um das Popover beim nächsten Klick zu schließen.
Referenz von https://getbootstrap.com/docs/3.3/javascript/#popovers
quelle
Diese Lösung funktioniert gut:
quelle
quelle
Sie können auch Ereignisblasen verwenden, um das Popup aus dem DOM zu entfernen. Es ist ein bisschen schmutzig, funktioniert aber gut.
Fügen Sie in Ihrem HTML-Code die .popover-close-Klasse zum Inhalt des Popovers hinzu, der das Popover schließen soll.
quelle
Es scheint, dass die Methode 'hide' nicht funktioniert, wenn Sie das Popover mit Selektordelegation erstellen. Stattdessen muss 'destroy' verwendet werden.
Ich habe es so gemacht:
JSfiddle hier
quelle
Wir fanden heraus, dass wir ein Problem mit der Lösung von @mattdlockyer hatten (danke für die Lösung!). Wenn Sie die Selector-Eigenschaft für den Popover-Konstruktor wie folgt verwenden ...
... die vorgeschlagene Lösung für BS3 wird nicht funktionieren. Stattdessen wird eine zweite lokale Popover-Instanz erstellt
$(this)
. Hier ist unsere Lösung, um dies zu verhindern:Wie bereits erwähnt,
$(this).popover('hide');
wird aufgrund des delegierten Listeners eine zweite Instanz erstellt. Die bereitgestellte Lösung verbirgt nur Popovers, die bereits instanziiert sind.Ich hoffe ich konnte euch etwas Zeit sparen.
quelle
Bootstrap unterstützt dies nativ :
JS Bin Demo
quelle
Diese Lösung beseitigt den lästigen zweiten Klick, wenn das Popover zum zweiten Mal angezeigt wird
getestet mit mit Bootstrap v3.3.7
quelle
Ich habe viele der vorherigen Antworten ausprobiert, wirklich nichts funktioniert für mich, aber diese Lösung hat:
https://getbootstrap.com/docs/3.3/javascript/#dismiss-on-next-click
Ex:
quelle
Ich habe mir Folgendes ausgedacht: Mein Szenario enthielt mehr Popover auf derselben Seite, und das Ausblenden machte sie nur unsichtbar. Aus diesem Grund war es nicht möglich, auf Elemente hinter dem Popover zu klicken. Die Idee ist, den spezifischen Popover-Link als "aktiv" zu markieren und dann können Sie den aktiven Popover einfach "umschalten". Dadurch wird das Popover vollständig geschlossen. $ ('. Popover-link'). Popover ({html: true, container: 'body'})
quelle
Ich entferne einfach andere aktive Popover, bevor das neue Popover angezeigt wird (Bootstrap 3):
quelle
getestet mit 3.3.6 und zweiter Klick ist ok
quelle
Demo: http://jsfiddle.net/nessajtr/yxpM5/1/
}}
Das ist meine Lösung dafür.
quelle
Dieser Ansatz stellt sicher, dass Sie ein Popover schließen können, indem Sie auf eine beliebige Stelle auf der Seite klicken. Wenn Sie auf eine andere anklickbare Entität klicken, werden alle anderen Popover ausgeblendet. Die Animation: false ist erforderlich, andernfalls wird in Ihrer Konsole der Fehler jquery .remove angezeigt.
quelle
Ok, dies ist mein erster Versuch, tatsächlich etwas über den Stapelüberlauf zu beantworten. Hier geht also nichts: P.
Es scheint nicht ganz klar zu sein, dass diese Funktionalität auf dem neuesten Bootstrap sofort funktioniert (na ja, wenn Sie bereit sind, Kompromisse einzugehen, wo die der Benutzer klicken kann. Ich bin mir nicht sicher, ob Sie klicken müssen Bewegen Sie den Mauszeiger per se, aber auf einem iPad funktioniert das Klicken als Umschalter.
Das Endergebnis ist, dass Sie auf einem Desktop den Mauszeiger bewegen oder klicken können (die meisten Benutzer bewegen den Mauszeiger). Wenn Sie auf einem Touch-Gerät das Element berühren, wird es aufgerufen, und wenn Sie es erneut berühren, wird es heruntergenommen. Natürlich ist dies ein kleiner Kompromiss gegenüber Ihrer ursprünglichen Anforderung, aber zumindest ist Ihr Code jetzt sauberer :)
quelle
Ich habe Matt Lockyers Code genommen und einen einfachen Reset durchgeführt, damit der Dom nicht durch das versteckte Element abgedeckt wird.
Matts Code: http://mattlockyer.com/2013/04/08/close-a-twitter-bootstrap-popover-when-clicking-outside/
Geige: http://jsfiddle.net/mrsmith/Wd2qS/
quelle
Versuchen Sie dies, dies wird ausgeblendet, indem Sie nach draußen klicken.
quelle
Ich hatte Probleme mit der Lösung von mattdlockyer, weil ich Popover-Links dynamisch mit Code wie dem folgenden eingerichtet habe:
Also musste ich es so modifizieren. Es hat viele Probleme für mich behoben:
Denken Sie daran, dass durch Zerstören das Element entfernt wird. Daher ist der Auswahlteil beim Initialisieren der Popovers wichtig.
quelle