无法清除setInterval

时间:2013-05-14 09:19:00

标签: javascript jquery html5 audio

有人可以帮我清除下面代码中的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 height="50" width="100" 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);



    }

    }

3 个答案:

答案 0 :(得分:0)

两件事:

  1. 确保在self.setInterval self中实际上是窗口。
  2. alert(a)可能会阻止间隔,因为它会停止JS执行,请尝试console.log(a)

  3. 此外,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();
    

答案 1 :(得分:0)

尝试在函数外声明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 :(得分:0)

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