Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 当我清除div时,设置超时仍然运行_Javascript - Fatal编程技术网

Javascript 当我清除div时,设置超时仍然运行

Javascript 当我清除div时,设置超时仍然运行,javascript,Javascript,我有一个setTimeOut,我已经分配给一个div,如下所示: function update(div,data){ div._myTimer = setTimeout(function() { update(data);},1); } 但由于某种原因,当我从页面中删除div时,超时仍然在运行 例如,假设我通过执行以下操作来清除div的父项: parent.innerHTML = ''; 这不应该因为div不再出现在DOM中而取消我的超时吗?或者我误解了什么。设置一次超时不需

我有一个setTimeOut,我已经分配给一个div,如下所示:

function update(div,data){
    div._myTimer = setTimeout(function() { update(data);},1);   
}
但由于某种原因,当我从页面中删除div时,超时仍然在运行

例如,假设我通过执行以下操作来清除
div
的父项:

parent.innerHTML = '';

这不应该因为div不再出现在DOM中而取消我的超时吗?或者我误解了什么。

设置一次超时不需要div存在。您应该记住超时的引用,并在清除div之前手动清除它

当您通过设置父级的innerHTML来删除div时,可以查找要删除的每个div,并检查它是否设置了_myTimer属性,如果您清除了计时器

for (var i=0, ilen=parent.childNodes.length; i<ilen; i++) {
    if (parent.childNodes[i]._myTimer) {
        clearTimeout(parent.childNodes[i]._myTimer);
    }
}

for(var i=0,ilen=parent.childNodes.length;i您误解了。从文档中删除div不会清除超时。您必须使用
clearTimeout
取消它。

您需要
clearTimeout
来执行此操作。您可以尝试以下操作:-

function update(div,data){
   div._myTimer = setTimeout(function() { update(data);},1);   
 }
function remove_div(event) { 
    // do stuff
    clearTimeout(timerId);
}

setTimout
方法返回的不是计时器运行所需的内容,它只是一个可用于停止计时器的句柄

for (var i=0, ilen=parent.childNodes.length; i<ilen; i++) {
    if (parent.childNodes[i]._myTimer) {
        clearTimeout(parent.childNodes[i]._myTimer);
    }
}

失去这个句柄只意味着你不能使用
clearTimeout
方法来停止计时器。

你误解了什么,但是阅读文档应该会把它清除掉。我的逻辑是,如果我删除
div
,那么与之相关的函数也会随之出现,这与使用return fals类似或者清除超时。函数“绑定到”它?我不知道这是什么术语。如果你做了
var arr=[0,1];div._myVariable=arr;
删除div后,您是否希望
arr
以任何方式发生变化?我的意思是作为div的一个属性,因此,如果div发生变化,则与之链接的任何事物的执行也会发生变化,但不要紧。您将如何生成对它的唯一引用,以便在以后删除?您已经有了对它的一个引用div。在删除div之前,首先删除引用。或者使用数组或对象为其创建自己的管理器类,在其中存储引用。可能与div元素的id一起。
for (var i=0, ilen=parent.childNodes.length; i<ilen; i++) {
    if (parent.childNodes[i]._myTimer) {
        clearTimeout(parent.childNodes[i]._myTimer);
    }
}