Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-Jquery.load()和setInterval()问题_Javascript_Jquery - Fatal编程技术网

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

Javascript-Jquery.load()和setInterval()问题,javascript,jquery,Javascript,Jquery,假设我这样做: $("#content").load(...); 在我加载的内容中,包含了一些javascript: var myCounter = 0; var myInterval = setInterval(function(){ myCounter++; $("#counter-display").html("Count: "+myCounter); }); 由于未知原因,如果我使用$(“#content”)重新加载内容。加载(…);-myInterval现在被调用了两

假设我这样做:

$("#content").load(...);
在我加载的内容中,包含了一些javascript:

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

   $("#counter-display").html("Count: "+myCounter);
});
由于未知原因,如果我使用$(“#content”)重新加载内容。加载(…);-myInterval现在被调用了两次

我试过这样做:

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

但是,它不起作用。有人知道有什么方法可以在.load上清除myInterval,而不需要将javascript放在加载的文件之外吗?

您的代码执行了两次


在声明变量之前,请尝试检查
if(typeof myInterval!=“undefined”)

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

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));
}

一次多编写一点代码,但对于全局变量等要干净得多。

您可能会发现myInterval是在某个局部范围内定义的

尝试使用:

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

   $("#counter-display").html("Count: "+myCounter);
});
myInterval现在将在全局范围中声明


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

已测试-不起作用。似乎每个“myInterval”实际上在DOM中都是单独处理的。我最初想过这样做,但我想尝试一种方法,而不需要每次都从html中获取值。然而,这确实是最有效的,所以我将使用它。谢谢进一步测试后,尽管此方法会更新显示的计数,但当尝试在脚本中使用该计数时,它仍会加倍。我找不到任何解决方案,只能将我的脚本放在加载内容之外(例如,在我执行.load()的页面上)。@Joe:您可能正在创建
@计数器显示
元素。将数据放在一个不会被替换的元素中。如果您将此代码加载两次,则不会将其计为全局代码,因此这将不起作用。clearInterval将只清除加载的myInterval,而不是第二个加载的myInterval。混淆..除非使用var语句,否则将变量声明为全局变量
myInterval=..
使myInterval全局化;几乎相当于
window.myInterval=…