Javascript JS clearInterval()将无法清除
刚才我问了一个问题,为什么我的setInterval()函数只运行一次 我回答了这个问题,但是我想检查并确保循环停止,所以我在循环中添加了一个alert(),发现clearInterval没有清除,即使我最初运行了连接到全局变量的setInterval函数 “不透明度”更改工作正常,但现在,在单击“确定”后,警报框将无限继续。。。最终我不需要警报功能,我只是想看看间隔是否真的被清除了,但它没有Javascript JS clearInterval()将无法清除,javascript,clearinterval,Javascript,Clearinterval,刚才我问了一个问题,为什么我的setInterval()函数只运行一次 我回答了这个问题,但是我想检查并确保循环停止,所以我在循环中添加了一个alert(),发现clearInterval没有清除,即使我最初运行了连接到全局变量的setInterval函数 “不透明度”更改工作正常,但现在,在单击“确定”后,警报框将无限继续。。。最终我不需要警报功能,我只是想看看间隔是否真的被清除了,但它没有 var run; var runOpt; document.getElementById('men
var run;
var runOpt;
document.getElementById('menu-1-A').style.opacity=0;
document.getElementById('menu-1-B').style.opacity=0;
function openSubMenu1(item) {
runOpt=item;
run = setInterval(runSubMenu1,35);
}
function runSubMenu1() {
var i=document.getElementById('menu-1-'+runOpt);
if (parseInt(i.style.opacity) == 1) {
clearInterval(run);
alert('done');
} else {
i.style.opacity = parseFloat(i.style.opacity) + .1;
}
}
谢谢plalx--openSubMenu1()是从onmouseover运行的,它反复调用openSubMenu1(),我创建了一个变量来测试菜单是否打开,如果打开,openSubMenu1()在调用setInterval()之前返回false
现在它只运行一次。谢谢。可能发生的情况是,您在第一个setInterval完成之前启动了多个实例,因此调用clearTimeout时引用错误 下面使用闭包而不是全局函数,因此每个调用都有自己的超时引用:
<div id="d0">jere</div>
<script>
var makeOpaque = (function() {
var timeout, el;
return function(id) {
if (!el) {
el = document.getElementById(id);
timeout = setInterval(makeOpaque, 50)
} else if (el && el.style.opacity < 1) {
el.style.opacity = +el.style.opacity + 0.1;
// debug
console.log(el.id + ' : ' + el.style.opacity);
} else {
timeout && clearInterval(timeout);
alert('done');
}
}
}());
makeOpaque('d0');
jere
var make不透明=(函数(){
var超时,el;
返回函数(id){
如果(!el){
el=document.getElementById(id);
超时=设置间隔(makeOpaque,50)
}else if(el&&el.style.opacity<1){
el.style.opacity=+el.style.opacity+0.1;
//调试
log(el.id+':'+el.style.opacity);
}否则{
超时和清除间隔(超时);
警报(“完成”);
}
}
}());
使不透明('d0');
您是否多次调用opensubnum1
了?您能创建js fiddle吗?