我有这段代码:
function functionName(){
// blablabla
// dosomething
setTimeout(functionName, 5000);
}
如果用户按下按钮,该功能停止回复,我想做到这一点...... 这样代码就变成了
function functionName(){
// blablabla
// dosomething
}
当他再次按下按钮时再次启动......
function functionName(){
// blablabla
// dosomething
setTimeout(functionName, 5000);
}
我怎么能这样做(用jquery)?
问候
答案 0 :(得分:3)
setTimeout
返回访问ID。该id可用于调用clearTimeout()
来停止当前超时,从而结束您的“功能循环”;
function functionName() {
if( this.tID ) {
clearInterval(tID);
delete this.tID;
}
// do something
this.tID = setTimeout(functionName, 5000);
}
this
会引用这样调用的window
对象。可能更好的想法是使用您自己的命名空间来存储id。
答案 1 :(得分:2)
非常简单,你可以使用来自JQuery的toggle()并传递两种方法。一个启动该功能,另一个停止超时。
var timeoutId;
function functionName(){
// blablabla
// dosomething
timeoutId = setTimeout(functionName, 2000);
}
$(document).ready(function(){
$('#myButton').toggle( function() {
functionName();
}, function() {
clearTimeout(timeoutId);
});
});
答案 2 :(得分:0)
要停止计时器,您可以使用clearTimeout
。
var timerId = setTimeout(functionName, 5000);
clearTimeout(timerId);
至于运行函数的逻辑,您只需检查点击了哪个按钮。
我并不是100%清楚你在寻找什么,所以这至少会回答你关于如何停止计时器的问题。
答案 3 :(得分:0)
这是设置切换功能以将setTimeout操作从on切换为off的一种方法:
(function toggler() { // don't pollute the global scope
var temp;
var running = false;
var myfunc = function() {
do_your_stuff_here(); // a pulsing red box in the Fiddle example
running = true;
temp = setTimeout(myfunc, 1000);
}
$('#toggle').click(function(e) { // toggler control is a link
e.preventDefault();
if (running) {
clearTimeout(temp); // turn it off
running = false;
} else {
myfunc(); // or turn it on
}
});
myfunc(); // kickstart it
})();
这是一个工作小提琴:http://jsfiddle.net/redler/XKTW9/