nut*_*tzt 2 javascript setinterval clearinterval
我有一个小程序,当您单击“条目”时,将打开编辑模式,而该条目是为其他人锁定的。每隔10秒就会发送一个ajax请求来更新表中的时间戳。
$(".entry-edit").click(function() {
// code
loopLockingVar = setInterval(function() { loopLockingFunction(id) }, 10000);
// code
});
Run Code Online (Sandbox Code Playgroud)
然后,我有一个取消按钮,将表中的时间戳更新为0并清除间隔。
$(".entry-cancel").click(function() {
// code
clearInterval(loopLockingVar);
// code
});
Run Code Online (Sandbox Code Playgroud)
当仅编辑一个条目时,所有操作均有效,但是如果同时处理两个或多个条目,然后单击“取消”,则第一个条目的间隔会更远...
我试过了
var loopLockingVar;
$(".entry-edit").click(function() {
// code
if( ! loopLockingVar) {
loopLockingVar = setInterval(function() { loopLockingFunction(id) }, 10000);
}
// code
});
Run Code Online (Sandbox Code Playgroud)
但是,如果您取消并再次单击“编辑”,此方法将无法正常工作。
您正在为同一变量分配多个时间间隔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]);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4093 次 |
| 最近记录: |