Javascript 我能';t停止我的setTimeout()循环

Javascript 我能';t停止我的setTimeout()循环,javascript,function,settimeout,cleartimeout,Javascript,Function,Settimeout,Cleartimeout,因此,我有一个主要的函数,它每2-17秒触发另一个函数,但当我试图用clearTimeout()停止它时,它只会继续并完全忽略clearTimeout() 这就是我的主要功能: var itemTimer; var stopTimeout; function major (){ var itemTime = Math.floor(Math.random() * 15000) + 2000; itemTimer = setTimeout('items()', itemTime);

因此,我有一个主要的
函数
,它每2-17秒触发另一个
函数
,但当我试图用
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);
}
这是我的停止超时功能:

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);
}
感谢您的帮助

您的
设置超时()
被错误调用;您正在调用
items()
major()
。相反,您需要将它们作为要调用的函数传递

不要将括号传递给参数,也不要将参数用引号括起来

而不是:

itemTimer = setTimeout('items()', itemTime);    
stopTimeout = setTimeout('major()',itemTime);
您正在寻找:

itemTimer = setTimeout(items, itemTime);
stopTimeout = setTimeout(major, itemTime);
希望这有帮助!:)

您的
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);
}

我想你的暂停时间越来越长了。只要调用一次
major
,变量
itemTimer
stopTimeout
就会被重新分配一个新的超时引用。因此,无法清除先前设置的超时。如果是这样的话,这应该是一个简单的解决办法。只需调用
stopTimer
,作为
major
中的第一条语句:

function major (){
    stopTimer();
    var itemTime = Math.floor(Math.random() * 15000) + 2000;
    itemTimer = setTimeout('items()', itemTime);    
    stopTimeout = setTimeout('major()',itemTime);
}

在何处和如何调用
stopTimer
?在何处和如何调用
stopTimer
?虽然
setTimeout(items,itemTime)
是首选语法,但这两种设置超时的方法或多或少是等效的。这不是问题所在。@NichtEric——太棒了!一旦你确认这解决了你的问题,请不要忘记点击投票按钮下方的灰色复选框——这会将其从“未回答问题”队列中删除,并为提问者和回答问题者赢得声誉。你可以在提出任何问题15分钟后这样做。当然,这么说,您没有义务将我的答案(或任何其他人的答案)标记为正确,尽管将问题标记为已解决有助于保持事情顺利进行:)好的,谢谢您不知道,因为我对该网站相对较新:DWhile
setTimeout(items,itemTime)
是首选语法,这两种设置超时的方法或多或少是等效的。这不是问题所在。@NichtEric——太棒了!一旦你确认这解决了你的问题,请不要忘记点击投票按钮下方的灰色复选框——这会将其从“未回答问题”队列中删除,并为提问者和回答问题者赢得声誉。你可以在提出任何问题15分钟后这样做。当然,这么说,你没有义务把我的答案(或其他人的答案)标记为正确,尽管把一个问题标记为已解决有助于保持事情顺利进行:)好的,谢谢你不知道,因为我是这个网站的新手:D