我在javascript中有3个计时器,我创建了按钮来控制它们的流量(切换它们)。但是(只有!)有时候他们不想停下来。哪里可以问题?定时器太多了?我在谷歌浏览器上测试它。
所以,我的代码中最重要的部分是:
//to insert infos
function addInfo(info){
$("#info").text(info);
clearTimeout(window.myTimer);
window.myTimer = setTimeout(function() {
$("#info").text("");
}, 5000);
return true;
}
function startHTML(){
window.TimerHTML = setInterval(function(){
//ajax
}, 500);
}
function startView(){
window.TimerView = setInterval(function(){
//ajax
}, 2000);
}
function stop_html(){
clearInterval(TimerHTML);
startView();
addInfo("html->view ");
}
function start_html(){
clearInterval(TimerView);
startHTML();
addInfo("view->html");
}
$(function() {
startView();
start_html();
//these actions should switch timers
$("#stop_html").click(function(){
stop_html();
return false;
});
$("#start_html").click(function(){
start_html();
return false;
});
});
编辑:添加了html
<button class="btn btn-primary btn-allwidth" id="start_html" data-toggle="tooltip" data-placement="right" title="View->Html">HTML ON</button>
<button class="btn btn-primary btn-allwidth" id="stop_html" data-toggle="tooltip" data-placement="right" title="HTML->View">HTML OFF</button>
<a href="#" onclick="javascript:$('#info-container').toggle('slow'); return false;" class="btn btn-primary btn-allwidth" data-toggle="tooltip" data-placement="right" title="Infos">Infos<i class="glyphicon glyphicon-chevron-down"></i></a>
<div id="info-container">
<div id="info" class="alert alert-success"></div>
</div>
答案 0 :(得分:0)
如果startHTML或startView中的任何一个连续执行(即startHTML连续执行两次),那么最终会创建两个间隔。
执行时
window.TimerHTML = setInterval(function(){
//ajax
}, 500);
连续两次,window.TimerHTML获取分配给它的新间隔。但这并不意味着在此之前分配给window.TimerHTML的先前间隔已被清除。它仍然继续,但不再分配要访问的变量。
您可以通过连续运行这两个命令来测试它
window.TimerHTML = setInterval(function(){
console.log("A");
}, 500);
window.TimerHTML = setInterval(function(){
console.log("B");
}, 500);
即使你清除了window.TimerHTML,你仍会看到&#34; A&#34;正在登录控制台。这是因为之前的计时器从未被清除过。并且TimerHTML不再具有访问权限。
这可能是你的计时器不会停止的原因。