Javascript - Jquery .load()和setInterval()问题

时间:2010-03-23 01:34:22

标签: javascript jquery

让我说我这样做:

$("#content").load(...);

在我正在加载的内容中包含一些javascript:

var myCounter = 0;
var myInterval = setInterval(function(){
   myCounter++;

   $("#counter-display").html("Count: "+myCounter);
});

由于未知原因,如果我用$(“#content”)重新加载内容.load(...); - myInterval现在被调用两次。

我尝试过这样的事情:

if (myInterval !== undefined){
   //dont set interval again
}

然而,它不起作用。有没有人知道任何方法,以便在.load上清除myInterval,而不需要将javascript放在加载的文件之外?

3 个答案:

答案 0 :(得分:2)

尝试在计数器元素上保留数据对象中的间隔和计数,如下所示:

var disp = $("#counter-display");
if(!disp.data("interval")) {
  disp.data("interval", setInterval(function() {
    var count = (disp.data("count") || 0) + 1;
    disp.data("count", count).html("Count: " + count);
  }, 500));
}

一次更多的代码,但对全局变量更清晰等等。

答案 1 :(得分:0)

您的代码正在执行两次。

在声明变量之前尝试检查if (typeof myInterval !== "undefined")

答案 2 :(得分:0)

您可能会发现myInterval正在某个本地范围内定义。

尝试使用:

var myCounter = 0;
myInterval = setInterval(function(){
   myCounter++;

   $("#counter-display").html("Count: "+myCounter);
});

myInterval现在将在全局范围内声明。

您当然可以使用clearInterval,并执行clearInterval(myInterval),这也将确保仅在使用间隔的实例上。