JavaScript多间隔和clearInterval
我有一个小程序,当你点击一个“条目”时,编辑模式是打开的,条目是为别人编辑锁定的。每隔10秒发送一个ajax请求来更新表中的时间戳JavaScript多间隔和clearInterval,javascript,setinterval,clearinterval,Javascript,Setinterval,Clearinterval,我有一个小程序,当你点击一个“条目”时,编辑模式是打开的,条目是为别人编辑锁定的。每隔10秒发送一个ajax请求来更新表中的时间戳 $(".entry-edit").click(function() { // code loopLockingVar = setInterval(function() { loopLockingFunction(id) }, 10000); // code }); 然后我有一个cancel按钮将表中的时间戳更新为0并清除间隔 $(".entry-c
$(".entry-edit").click(function() {
// code
loopLockingVar = setInterval(function() { loopLockingFunction(id) }, 10000);
// code
});
然后我有一个cancel按钮将表中的时间戳更新为0并清除间隔
$(".entry-cancel").click(function() {
// code
clearInterval(loopLockingVar);
// code
});
当只编辑一个条目时,这一切都会起作用,但如果同时处理两个或多个条目,然后单击“取消”,则第一个条目的间隔将进一步缩短
我试过:
var loopLockingVar;
$(".entry-edit").click(function() {
// code
if( ! loopLockingVar) {
loopLockingVar = setInterval(function() { loopLockingFunction(id) }, 10000);
}
// code
});
但是,如果取消并再次单击“编辑…”,则此操作不会更有效。将多个间隔ID分配给同一个变量,该变量将只保存上次分配给它的间隔ID。清除间隔时,将仅清除与该ID对应的间隔 一个简单的解决方案是维护一个区间ID数组,然后清除数组中表示的所有区间。代码可能如下所示:
var intervalIds = [];
$(".entry-edit").click(function() {
intervalIds.push(setInterval(function() { loopLockingFunction(id) }, 10000));
});
$(".entry-cancel").click(function() {
for (var i=0; i < intervalIds.length; i++) {
clearInterval(intervalIds[i]);
}
});
var intervalIds=[];
$(“.entry edit”)。单击(函数(){
push(setInterval(function(){loopLockingFunction(id)},10000));
});
$(“.entry cancel”)。单击(函数(){
对于(变量i=0;i
也许你可以这样试试
var-loopLockingVar
$(".entry-edit").click(loopLockingVar,function() {
// code
loopLockingVar = setInterval(function() { loopLockingFunction(id) }, 10000);
// code
});
请包括您的HTML以及。最好是可以在jsFiddle或jsBin上重现问题。您可以使用interval-iddle数组吗?为什么会这样?他不是在覆盖间隔,只在第一个位置设置最后一个吗?@Alexus每次都会创建一个新的间隔,并将其ID分配给变量。间隔本身没有被覆盖,只有变量的间隔ID值。所以你的意思是,变量只是指向间隔的指针,可以用来取消设置间隔,但是,一旦指针改变,间隔仍将继续执行?@Alexus确实如此。它实际上是分配给变量的间隔ID,甚至不是间隔对象本身。是的,谢谢你的提示!但我需要做一个对象散列。如果清除数组中的所有值,将删除所有间隔