我不知何故无法停止我的 setTimeout() 循环
I somehow can't stop my setTimeout() loop
所以我有一个主要的 function
每 2 - 17 秒触发另一个 function
但是当我试图用 clearTimeout()
停止它时它会继续并完全忽略 clearTimeout()
。
所以这是我的主要功能:
var itemTimer;
var stopTimeout;
function major (){
var itemTime = Math.floor(Math.random() * 15000) + 2000;
itemTimer = setTimeout('items()', itemTime);
stopTimeout = setTimeout('major()',itemTime);
}
这是我的停止超时函数:
function stopTimer() {
clearTimeout(itemTimer);
clearTimeout(stopTimeout);
}
感谢您的帮助
您的 setTimeout()
调用有误;您正在调用 items()
和 major()
。相反,您需要将它们作为要调用的函数传递。
不要将括号传递给参数,也不要将参数用引号引起来。
而不是:
itemTimer = setTimeout('items()', itemTime);
stopTimeout = setTimeout('major()',itemTime);
您正在寻找:
itemTimer = setTimeout(items, itemTime);
stopTimeout = setTimeout(major, itemTime);
希望对您有所帮助! :)
我认为您的超时时间越来越长。一旦 major
被调用一次,变量 itemTimer
和 stopTimeout
就会重新分配一个新的超时引用。因此将无法清除先前设置的超时。如果是这种情况,它应该很容易修复。只需调用 stopTimer
作为 major
中的第一个语句:
function major (){
stopTimer();
var itemTime = Math.floor(Math.random() * 15000) + 2000;
itemTimer = setTimeout('items()', itemTime);
stopTimeout = setTimeout('major()',itemTime);
}
所以我有一个主要的 function
每 2 - 17 秒触发另一个 function
但是当我试图用 clearTimeout()
停止它时它会继续并完全忽略 clearTimeout()
。
所以这是我的主要功能:
var itemTimer;
var stopTimeout;
function major (){
var itemTime = Math.floor(Math.random() * 15000) + 2000;
itemTimer = setTimeout('items()', itemTime);
stopTimeout = setTimeout('major()',itemTime);
}
这是我的停止超时函数:
function stopTimer() {
clearTimeout(itemTimer);
clearTimeout(stopTimeout);
}
感谢您的帮助
您的 setTimeout()
调用有误;您正在调用 items()
和 major()
。相反,您需要将它们作为要调用的函数传递。
不要将括号传递给参数,也不要将参数用引号引起来。
而不是:
itemTimer = setTimeout('items()', itemTime);
stopTimeout = setTimeout('major()',itemTime);
您正在寻找:
itemTimer = setTimeout(items, itemTime);
stopTimeout = setTimeout(major, itemTime);
希望对您有所帮助! :)
我认为您的超时时间越来越长。一旦 major
被调用一次,变量 itemTimer
和 stopTimeout
就会重新分配一个新的超时引用。因此将无法清除先前设置的超时。如果是这种情况,它应该很容易修复。只需调用 stopTimer
作为 major
中的第一个语句:
function major (){
stopTimer();
var itemTime = Math.floor(Math.random() * 15000) + 2000;
itemTimer = setTimeout('items()', itemTime);
stopTimeout = setTimeout('major()',itemTime);
}