我在侧边栏上使用Twitter Bootstrap的Popover功能。获取侧边栏并每30秒重新加载一次内容。我正在起诉XMLHttpRequest,通过获取一个名为stats.php的文件来重新加载侧边栏的内容。
以下代码是位于页面标题中的“刷新”代码。
function onIndexLoad()
{
setInterval(onTimerCallback, 30000);
}
function onTimerCallback()
{
var request = new XMLHttpRequest();
request.onreadystatechange = function()
{
if (request.readyState == 4 && request.status == 200)
{
document.getElementById("stats").style.opacity = 0;
setTimeout(function() {
document.getElementById("stats").innerHTML = request.responseText;
document.getElementById("stats").style.opacity = 100;
}, 1000);
}
}
request.open("GET", "stats.php", true);
request.send();
}
上面的代码完美无瑕地运行,然而,在重新加载#stats div后,popover不再做它应该的 - 弹出。
popover代码位于foreach()循环的stats.php中,因为我需要多个popover脚本,因为侧边栏上有多个弹出窗口。
这是我的popover代码:
$(document).ready(function() {
$('a[rel=popover_$id]').popover({
placement:'right',
title:'$title',
content: $('#popover_content_$id').html()
});
});
$id
和$title
是动态的,因为它们是从foreach()循环中提取的。
如何解决这个问题,以便在div重新加载后,popover函数会重新初始化?
$("a[rel=popover_controller_$cid]").on({
mouseenter: function () {
$('a[rel=popover_$id]').popover({
placement:'right',
title:'$title',
content: $('#popover_content_$id').html()
});
}
});
我也尝试过:
$("a[rel=popover_controller_$cid]").on("mouseover", function () {
$('a[rel=popover_$id]').popover({
placement:'right',
title:'$title',
content: $('#popover_content_$id').html()
});
});
答案 0 :(得分:1)
.live
已弃用。使用.on
委派
尝试这样的事情:
$('#stats').on("mouseenter", "a[rel=popover_controller_$cid]",function () {
$('a[rel=popover_$id]').popover({
placement:'right',
title:'$title',
content: $('#popover_content_$id').html()
});
});
这会将mouseenter事件从#stats
委托给a[rel=popover_controller_$cid]
,因为事件已委派,所以当#stats
内容被替换时,它仍然会触发。
当你在它时 - 你应该使用jquery的ajax而不是本机xhr。它更容易和更多的跨浏览器。
$.get('stats.php', function(d){
$('#stats').html(d);
};
-
setInterval(function(){
$.get('stats.php', function(data) {
$('#stats').html(data);
});
}, 30000);