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