2011-07-31 154 views
1

这里是我的代码:重置setTimeout每按钮点击一次?

var sec = 10; 
var timer = setInterval(function() {  
    $('#timer span').text(sec--); 
}, 1000); 

它设置一个setTimeout 10秒。我想要一个重置按钮,点击后,再次以10秒的延迟呼叫setTimeout

+0

在哪里你的代码? – Natim

+0

@Natim我添加了我的代码 – idontknowhow

回答

6

你可以通过将你的setTimeout()调用的结果存储到某个变量中,然后在点击按钮时将存储的结果传递给clearTimeout(),然后再调度新的超时并将其分配回相同的变量。

听起来有点棘手,但它确实很简单。这里有一个例子:

http://jsfiddle.net/kzDdq/

+0

没有必要污染全局命名空间。避免全局变量。 –

+0

@Šime - 你的例子和我的一样把许多东西放入全局命名空间。在全局范围中使用'var'仍然会创建一个全局变量。此外,该示例的目的是演示setTimeout() - >某些变量 - > clearTimeout()的流程,仅此而已。 – aroth

+0

通常,在我对SO的回答中,暗示JavaScript代码应该位于ready处理程序(或加载处理程序)内,并且我的附加jsFiddle演示程序可以证明这一点。 –

6

HTML:

<button id="resetButton">Reset</button> 

的JavaScript:

var resetButton = $('#resetButton')[0], 
    timerId; 

function timerExpired() { 
    alert('Timer expired'); 
} 

$(resetButton).click(function() { 
    clearTimeout(timerId); 
    timerId = setTimeout(timerExpired, 10000); 
}).triggerHandler('click'); 

注:这段JavaScript代码应该放在里面a ready handler

现场演示:http://jsfiddle.net/QkzNj/

(你可以设置延迟像3000(3秒的较小值) - 这将使它更容易测试演示)

0
<div>Div</div> 

var div = document.getElementsByTagName("div")[0]; 

function timedMsg() { 
    console.log("timeout expired."); 
    div.t = setTimeout(timedMsg, 1000);  
} 

timedMsg(); 

div.onclick = function() { 
    clearTimeout(div.t); 
    timedMsg(); 
}; 
+0

我更新了我的代码,请参阅 – idontknowhow