另一种解决方案:
$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)
{
//Clean the popover previous content
$('.popover.in .popover-inner').empty();
//Fill in content with new AJAX data
$('.popover.in .popover-inner').html(data);
}
});
});
$target.find('.myPopOver').mouseleave(function()
{
$(this).popover('hide');
});
这里的想法是通过 mouseenter 和 mouseleave 事件手动触发 PopOver 的显示。
在 mouseenter 上,如果没有为您的项目创建 PopOver (if($(this).data('popover') == null)),请创建它。有趣的是,您可以通过将其作为参数 (template) 传递给 popover() 函数来定义自己的 PopOver 内容。不要忘记将 html 参数也设置为 true。
这里我只是创建了一个名为 popovertemplate 的隐藏模板,并用 JQuery 克隆它。 克隆后不要忘记删除 id 属性,否则您最终会在 DOM 中得到重复的 id。还要注意 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>
在创建步骤之后(或者如果它已经创建),您只需使用 $(this).popover('show'); 显示 popOver;
然后是经典的 Ajax 调用。成功后,您需要在从服务器放入新的新数据之前清理旧的弹出框内容。我们如何获取当前的弹出框内容?使用 .popover.in 选择器! .in 类表示弹出框当前已显示,这就是这里的技巧!
要完成,在 mouseleave 事件中,只需隐藏弹出框即可。