另一种解决方案:
$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事件中,只需隐藏弹出框。