所以我有一个主要function
,每隔2-17秒触发另一个function
,但当我尝试用clearTimeout()
停止它时,它会继续并完全忽略{{1} }}。
所以这是我的主要职能:
clearTimeout()
这是我的停止超时功能:
var itemTimer;
var stopTimeout;
function major (){
var itemTime = Math.floor(Math.random() * 15000) + 2000;
itemTimer = setTimeout('items()', itemTime);
stopTimeout = setTimeout('major()',itemTime);
}
感谢您的帮助
答案 0 :(得分:1)
您的setTimeout()
被错误地调用了;您正在调用items()
和major()
。相反,您需要将它们作为要调用的函数传递。
不要将括号传递给参数,也不要将参数包装在引号中。
而不是:
itemTimer = setTimeout('items()', itemTime);
stopTimeout = setTimeout('major()',itemTime);
您正在寻找:
itemTimer = setTimeout(items, itemTime);
stopTimeout = setTimeout(major, itemTime);
希望这有帮助! :)
答案 1 :(得分:1)
我认为你的超时正在累积。一旦major
被调用一次,变量itemTimer
和stopTimeout
就会被重新分配一个新的超时引用。因此,无法清除之前设置的超时。如果是这种情况,它应该是一个简单的解决方案。只需将stopTimer
作为major
中的第一个声明:
function major (){
stopTimer();
var itemTime = Math.floor(Math.random() * 15000) + 2000;
itemTimer = setTimeout('items()', itemTime);
stopTimeout = setTimeout('major()',itemTime);
}