这里是我的代码:重置setTimeout每按钮点击一次?
var sec = 10;
var timer = setInterval(function() {
$('#timer span').text(sec--);
}, 1000);
它设置一个setTimeout
10秒。我想要一个重置按钮,点击后,再次以10秒的延迟呼叫setTimeout
。
这里是我的代码:重置setTimeout每按钮点击一次?
var sec = 10;
var timer = setInterval(function() {
$('#timer span').text(sec--);
}, 1000);
它设置一个setTimeout
10秒。我想要一个重置按钮,点击后,再次以10秒的延迟呼叫setTimeout
。
你可以通过将你的setTimeout()
调用的结果存储到某个变量中,然后在点击按钮时将存储的结果传递给clearTimeout()
,然后再调度新的超时并将其分配回相同的变量。
听起来有点棘手,但它确实很简单。这里有一个例子:
没有必要污染全局命名空间。避免全局变量。 –
@Šime - 你的例子和我的一样把许多东西放入全局命名空间。在全局范围中使用'var'仍然会创建一个全局变量。此外,该示例的目的是演示setTimeout() - >某些变量 - > clearTimeout()的流程,仅此而已。 – aroth
通常,在我对SO的回答中,暗示JavaScript代码应该位于ready处理程序(或加载处理程序)内,并且我的附加jsFiddle演示程序可以证明这一点。 –
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秒的较小值) - 这将使它更容易测试演示)
<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();
};
我更新了我的代码,请参阅 – idontknowhow
在哪里你的代码? – Natim
@Natim我添加了我的代码 – idontknowhow