我需要有人告诉我如何取消或清除此功能的计时器。
//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);
});
还要告诉我我做错了什么以及为什么这不起作用。
答案 0 :(得分: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);
});
答案 1 :(得分:2)
添加:
var myTime;
myTime = setTimeout(function countdown() {...
清除它:
clearTimeout(myTime);
答案 2 :(得分:1)
告诉setTimeout
要清除的内容:
countdown = setTimeout(function countdown() {...}
确保在脚本之上声明countdown
,以便它在click
处理程序中可用。
答案 3 :(得分:1)
很好地做到这一点的一种方法是:
{
var myTime;
myTime = setTimeout(function countdown() {
//blah
alert('Test');
clearTimeout(myTime);
}, 500);
}
那么你的变量只是作用域。
答案 4 :(得分: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);
});