2012-06-20 57 views
1

我需要有人告訴我如何取消或清除此功能上的定時器。如何從此取消setTimeout?

//Html 
    <a id="button" data-url="http://url.com">Click me!</a> 

    Redirecting in <span id="timer"></span> seconds... 
    <a href="javascript:void(0)" class="cancel">Cancel</a> 
// jS 
    $('a#button').click(function() { 
     var url = $(this).attr("data-url"); 
     if(url.indexOf("http://")!==0){ 
       url = "http://"+url; 
      } 
     var seconds = 5, 
      el = $('#timer') 
     el.text(seconds) 
     setTimeout(function countdown() { 
      seconds-- 
      el.text(seconds) 
      if (seconds > 0) { 
       setTimeout(countdown, 1000) 
      } 
      else { 
       window.open(url , "_self") 
      } 
     }, 1000) 
    }) 


    $('a.cancel').click(function(){ 
     clearTimeout(countdown); 
    }); 

還告訴我,我的「M做錯了,這是爲什麼不工作

+0

不走運的傢伙,這裏http://jsfiddle.net/hVTPq/嘗試 – neek

回答

3

你需要這樣做:

var myTime; 
    $('a#button').click(function() { 
    var url = $(this).attr("data-url"); 
    if(url.indexOf("http://")!==0){ 
      url = "http://"+url; 
     } 
    var seconds = 5, 
     el = $('#timer') 
    el.text(seconds) 


myTime = setTimeout(function countdown() { 
     seconds-- 
     el.text(seconds) 
     if (seconds > 0) { 
      myTime =setTimeout(countdown, 1000) 
     } 
     else { 
      //window.open(url , "_self") 
      alert('no'); 
     } 

}, 500); 

}) 


$('a.cancel').click(function(){ 
     clearTimeout(myTime); 

}); 
+0

會嗎保持主要功能呢?其實讓我嘗試一下。 – neek

+0

這不會在點擊處理程序內部工作,你需要刪除'var'關鍵字 – Sarfraz

+0

是的,這是真的,把它從點擊功能 – GregM

1

告訴setTimeout什麼cleaer:

countdown = setTimeout(function countdown() {...} 

確保countdown已在腳本的頂部聲明,以便它在內部可用click處理程序。

+0

沒有運氣的傢伙,在這裏試試jsfiddle.net/hVTPq – neek

1

地址:

var myTime; 

myTime = setTimeout(function countdown() {... 

清除它:

clearTimeout(myTime); 
+0

沒有運氣的傢伙,在這裏試試jsfiddle.net/hVTPq – neek

1

一個辦法做到這一點很好的是:

{ 
var myTime; 
myTime = setTimeout(function countdown() { 
//blah 
alert('Test'); 
clearTimeout(myTime); 
}, 500); 
} 

那麼你的變量只是作用域。

+0

沒有運氣的傢伙,在這裏試試jsfiddle.net/hVTPq – neek

+0

剛剛嘗試了我給了。工作。 –

1

我會做這樣的: (編輯:點擊此處查看http://jsfiddle.net/URHVd/3/,它工作正常)

var timer = null; //this will be used to store the timer object 
var seconds = 5; 
var url = null; 

function countdown() { 
    seconds--; 

    el.text(seconds); 
    if (seconds > 0) { 
     timer = setTimeout(countdown, 1000) 
    } 
    else { 
     window.open(url , "_self") 
    } 
} 

$('a#button').click(function() { 
    url = $(this).attr("data-url"); 

    if(url.indexOf("http://")!==0){ 
     url = "http://"+url; 
    }   
    el = $('#timer'); 
    el.text(seconds) 
    timer = setTimeout(countdown, 1000) 
}) 


$('a.cancel').click(function(){ 
    clearTimeout(timer); 
});​ 
+0

不,它只是呆在5 – neek

+0

沒有運氣的傢伙,在這裏試試jsfiddle.net/hVTPq – neek

+0

我更正了我的代碼,它工作正常:http://jsfiddle.net/URHVd/3/ –