Другое решение:
$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');
});
Идея здесь состоит в том, чтобы вручную запускать отображение PopOver с событиями mouseenter и mouseleave .
В mouseenter , если для вашего элемента не создано PopOver ( if ($ (this) .data ('popover') == null) ), создайте его. Что интересно, вы можете определить свой собственный контент PopOver, передав его в качестве аргумента ( шаблона ) функции popover () . Не забудьте также установить для параметра html значение true .
Здесь я просто создаю скрытый шаблон под названием popovertemplate и клонирую его с помощью JQuery. Не забудьте удалить атрибут id после его клонирования, иначе вы получите дублированные идентификаторы в DOM. Также обратите внимание, что style = "display: none", чтобы скрыть шаблон на странице.
<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>
После этапа создания (или если он уже был создан) вы просто отображаете popOver с $ (this) .popover ('show');
Потом классический вызов Ajax. В случае успеха вам необходимо очистить старое содержимое всплывающего окна, прежде чем помещать новые свежие данные с сервера . Как мы можем получить текущий всплывающий контент? С селектором .popover.in ! .в указывает, что всплывающее окно в настоящее время отображается, вот в чем фокус!
Чтобы закончить, при событии mouseleave просто скройте всплывающее окно.