无法清除 setInterval

Posted

技术标签:

【中文标题】无法清除 setInterval【英文标题】:unable to clear the setInterval 【发布时间】:2013-05-14 09:19:00 【问题描述】:

谁能帮我清除下面代码中的 SetInterval。我已经厌倦了 window.clearInterval(intervalListener) 它不起作用。

    <audio id="audio1" controls="controls" ontimeupdate="init(this.currentTime)"; style="display:block;">
    <source src="Audio.mp3" type="audio/mpeg">
    <source src="Audio.ogg" type="audio/ogg">
    <embed   src="Audio.mp3"></embed>
    </audio>

    function init(val)
    
    var audio=document.getElementById('audio1');

    if(val==2)
    
    var a=0;
    intervalListener = self.setInterval(function()

    
        alert(a);
        if(a===8)
        
          window.clearInterval(intervalListener);
        
        a++;
    , 1000);



    

    

【问题讨论】:

它工作得很好,伙计...... 在这里查看jsfiddle.net/7XrUq 我知道单独调用时效果很好。 我需要在 ontimeupdate 播放音频时完成 【参考方案1】:

尝试在函数外声明intervalListener:

var intervalListener;

function init(val) 
    var audio=document.getElementById('audio1');

    if(val==2) 
        var a=0;
        intervalListener = self.setInterval(function()
            alert(a);
            if(a===8)
                window.clearInterval(intervalListener);
            
            a++;
        , 1000);
    

【讨论】:

【参考方案2】:

两件事:

    确保self.setInterval self 实际上是窗口。 alert(a) 可能会在停止 JS 执行时干扰时间间隔,请尝试使用 console.log(a)

另外,setInterval 通常最好替换为 setTimeout

function interval(a)
    setTimeout(function()
        console.log(a);
        if(a<8) interval(++a);
    ,1000);

interval(0);

或者,如果您不喜欢匿名函数,您可以使用:

var a = 0;
function interval2()
    console.log(a);
    if(a<8)
        a++;
        setTimeout(interval2,1000);
       

interval2();

【讨论】:

【参考方案3】:

您需要在所有函数之外同时声明aintervalListener,以便它们处于全局范围内。

【讨论】:

以上是关于无法清除 setInterval的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 setstate 清除受控输入

无法清除 setInterval

removeAllCachedResponses 无法清除 sharedURLCache?

MSMQ 无法删除或清除队列

无法清除模拟位置?

无法清除学说 2 集合