我正在使用弹出框来显示我在ajax请求后更新的一些信息。基本上,我正在更新在悬停时触发弹出窗口的元素的data-content属性。我正在检查dom,数据内容的东西肯定在更新,但是popover的内容保持不变。我一直在尝试我能想到的一切,并开始觉得我错过了一些简单的东西。有人可以帮我吗。她的一些代码:
<ul>
<li class="player_name_li" rel="popover" data-placement="right"
data-html="true" data-title="Dude" data-trigger="hover"
data-content="<div class='custom_content'>Heres some content</div>"
data-original-title="" title=""><span class="player_name">Dude</span>
</li>
</ul>
然后我的脚本
$(document).ready(function(){
$('.player_name_li').popover({
template: '<div class="popover" style="width:250px;"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'});
setInterval(function(){update_scores();}, 6000);
function update_scores()
{
$.ajax({
url: HOST_NAME,
type: 'POST',
//async: false,
data: {player_array: my_data_is_generated_from_page)}
}).done(function(results){
var obj = $.parseJSON(results);
//this reloads the stupid popover data
$.each(obj.fancy_return, function(index, value){
$('.player_info_link').each(function(){
var huh = $(this).closest('li');
huh.attr('data-content', value.new_table);
});
)};
}
现在就像我说的那样全部像我期望的那样工作,并更新每个popover li的数据内容,我通过检查dom来验证,但是当我将鼠标悬停在li上时,它仍然显示数据内容的旧内容。我查看了一些帖子并尝试在我的popover与content: function(){return $(this).data('content');}
的实例中按功能设置内容,但这不起作用。我也试过破坏并重新创建每个可以正常工作的元素,但由于它在一个区间函数中并自动触发,如果你打开一个让它看起来很麻烦,它会关闭一个打开的弹出窗口。有什么想法吗?
答案 0 :(得分:8)
你是正确的,正如你所提到的,正确的方法是给content: function(){return someDynamicContent}
。我看到您遇到的唯一问题是您可能不知道$('.player_name_li').data('content')
不会自动与$('.player_name_li').attr('data-content')
的操作保持同步。您需要确保在AJAX回调中更改的那个与您在content
定义中引用的那个相同。
如果你定义
$('.player_name_li')
.popover({
template: '<div class="popover" style="width:250px;"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>',
content: function (){return $(this).data('content')}
})
然后你需要使用
huh.data('content', value.new_table);
如果你这样做,插件将在幕后进行所有重新初始化。