Javascript JS clearInterval()将无法清除

Javascript JS clearInterval()将无法清除,javascript,clearinterval,Javascript,Clearinterval,刚才我问了一个问题,为什么我的setInterval()函数只运行一次 我回答了这个问题,但是我想检查并确保循环停止,所以我在循环中添加了一个alert(),发现clearInterval没有清除,即使我最初运行了连接到全局变量的setInterval函数 “不透明度”更改工作正常,但现在,在单击“确定”后,警报框将无限继续。。。最终我不需要警报功能,我只是想看看间隔是否真的被清除了,但它没有 var run; var runOpt; document.getElementById('men

刚才我问了一个问题,为什么我的setInterval()函数只运行一次

我回答了这个问题,但是我想检查并确保循环停止,所以我在循环中添加了一个alert(),发现clearInterval没有清除,即使我最初运行了连接到全局变量的setInterval函数

“不透明度”更改工作正常,但现在,在单击“确定”后,警报框将无限继续。。。最终我不需要警报功能,我只是想看看间隔是否真的被清除了,但它没有

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吗?