我有一个setTimeOut,我已经分配给这样的div:
function update(div,data){
div._myTimer = setTimeout(function() { update(data);},1);
}
但由于某种原因,当我从页面中删除div时,超时仍然会运行。
例如,假设我通过以下方式清除div
的父级:
parent.innerHTML = '';
这不应该取消我的时间因为div不再出现在DOM中吗?或者我误解了什么。
答案 0 :(得分:1)
设置超时后不需要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);
}
}
或者如果你以这种方式删除div,你可以直接访问引用:
clearTimeout(div._myTimer);
div.parentNode.removeChild(div);
不使用innerHTML ='',这样您可以更好地控制将要删除的元素
答案 1 :(得分:1)
从setTimout
方法返回的内容不是定时器运行所需的,它只是一个可以用来停止定时器的句柄。
丢失该句柄只意味着您无法使用clearTimeout
方法停止计时器。
答案 2 :(得分:0)
你误会了。从文档中删除div不会清除超时。您必须使用clearTimeout
取消它。
答案 3 :(得分:0)
您需要clearTimeout
才能执行此操作。你可以尝试这样的事情: -
function update(div,data){
div._myTimer = setTimeout(function() { update(data);},1);
}
function remove_div(event) {
// do stuff
clearTimeout(timerId);
}