JavaScript多间隔和clearInterval

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

我有一个小程序,当你点击一个“条目”时,编辑模式是打开的,条目是为别人编辑锁定的。每隔10秒发送一个ajax请求来更新表中的时间戳

$(".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,甚至不是间隔对象本身。是的,谢谢你的提示!但我需要做一个对象散列。如果清除数组中的所有值,将删除所有间隔