Javascript JS:setInterval和blur
我有这个:Javascript JS:setInterval和blur,javascript,Javascript,我有这个: $(window).blur(function() { setInterval(function() { $.ajax({ type: "POST", url: "imback.php", data: { mode: 'ajax', getUpdates: 'auto', },
$(window).blur(function() {
setInterval(function() {
$.ajax({
type: "POST",
url: "imback.php",
data: {
mode: 'ajax',
getUpdates: 'auto',
},
success: function(msg){
document.title = msg + titleOrig;
}
});
}, 35000);
很好
尽管如此,如果你已经模糊了,然后当你重新聚焦时,它会继续进行ajax调用,但它不会在间隔35秒后停止发送ajax调用
我怎样才能解决这个问题?
})看起来需要在焦点上清除间隔()设置间隔时需要存储间隔,然后在窗口焦点上清除间隔。像这样:
(function() {
var interval = null;
$(window).blur(function() {
if (interval) clearInterval(interval);
interval = setInterval(function() {
$.ajax({
type: "POST",
url: "imback.php",
data: {
mode: 'ajax',
getUpdates: 'auto',
},
success: function(msg){
document.title = msg + titleOrig;
}
});
}, 35000);
});
$(window).focus(function() {
if (interval) clearInterval(interval);
interval = null;
});
})();
编辑:我在代码周围添加了(function(){…})(
,以封装“interval”变量,本质上使其成为窗口模糊和焦点处理程序的“私有”变量。使用闭包:
$(window).blur(function() {
tracktime = new Date();
var iVal = setInterval(function() {
$.ajax({
type: "POST",
url: "imback.php",
data: {
mode: 'ajax',
getUpdates: 'auto',
},
success: function(msg){
document.title = msg + titleOrig;
}
});
}, 2000);
$(window).focus(function() { clearInterval(iVal); });
});
这允许您在清除间隔之前不必检查是否已设置间隔。而且,它允许您确保清除正确的间隔,而不是希望没有其他调用覆盖您的变量