Eine andere Lösung:
$target.find('.myPopOver').mouseenter(function()
{
if($(this).data('popover') == null)
{
$(this).popover({
animation: false,
placement: 'right',
trigger: 'manual',
title: 'My Dynamic PopOver',
html : true,
template: $('#popoverTemplate').clone().attr('id','').html()
});
}
$(this).popover('show');
$.ajax({
type: HTTP_GET,
url: "/myURL"
success: function(data)
{
$('.popover.in .popover-inner').empty();
$('.popover.in .popover-inner').html(data);
}
});
});
$target.find('.myPopOver').mouseleave(function()
{
$(this).popover('hide');
});
Die Idee hier ist, die Anzeige von PopOver mit mouseenter & mouseleave Ereignissen manuell auszulösen .
Auf MouseEnter- , wenn es keine popover für Ihren Artikel (erstellt ist if ($ (this) .data ( 'popover') == null) ), erstellen Sie es. Interessant ist, dass Sie Ihren eigenen PopOver-Inhalt definieren können, indem Sie ihn als Argument ( Vorlage ) an die Funktion popover () übergeben . Vergessen Sie nicht, auch den HTML- Parameter auf true zu setzen .
Hier erstelle ich einfach eine versteckte Vorlage namens popovertemplate und klone sie mit JQuery. Vergessen Sie nicht, das ID-Attribut nach dem Klonen zu löschen, da sonst doppelte IDs im DOM angezeigt werden. Beachten Sie auch, dass style = "display: none" ist , um die Vorlage auf der Seite auszublenden.
<div id="popoverTemplateContainer" style="display: none">
<div id="popoverTemplate">
<div class="popover" >
<div class="arrow"></div>
<div class="popover-inner">
//Custom data here
</div>
</div>
</div>
</div>
Nach dem Erstellungsschritt (oder wenn er bereits erstellt wurde) zeigen Sie einfach den popOver mit $ (this) .popover ('show') an.
Dann klassischer Ajax-Anruf. Bei Erfolg müssen Sie den alten Popover-Inhalt bereinigen, bevor Sie neue frische Daten vom Server ablegen . Wie können wir den aktuellen Popover-Inhalt erhalten? Mit dem .popover.in Selektor! Die .in- Klasse zeigt an, dass das Popover gerade angezeigt wird, das ist hier der Trick!
Zum Abschluss des Mausblatt- Ereignisses verstecken Sie einfach das Popover.