-1

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



    }

    }
4

3 回答 3

0

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

于 2013-05-14T10:10:11.450 回答
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);
    }
}
于 2013-05-14T09:39:50.233 回答
0

两件事情:

  1. 确保在self.setIntervalself 实际上是窗口。
  2. 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();
于 2013-05-14T09:32:25.840 回答