2013-05-14 60 views
-1

有人可以帮我清除下面代码中的SetInterval。我已经累了window.clearInterval(intervalListener)它不工作。无法清除setInterval

<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); 



    } 

    } 
+0

它的工作很好... – 2013-05-14 09:25:41

+0

Chech here http://jsfiddle.net/7XrUq/ – 2013-05-14 09:27:15

+0

我知道它独立调用时效果很好。 – Unknownman 2013-05-14 09:29:44

回答

0

两件事情:

  1. 确保在self.setInterval自我实际上是窗口。
  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(); 
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); 
    } 
} 
0

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