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=…