如何在Javascript/jQuery中重置超时?

16

我在网页中有一个字段 A,当用户编辑它时,会使用 jQuery 调用 API 更新字段 B。编辑后,应每 10 秒调用一次 API 再次更新字段 B。目前我是这样做的:

setTimeout(thisFunction, 10000);
问题在于每次用户编辑字段A时,都会设置此超时,这将导致在编辑了几次字段A后多次设置超时并调用API。这使得网站看起来相当紧张。
我想要做的是,每次编辑该字段时设置新的超时,无论是用户编辑字段A还是间隔达到10秒并轮询API。换句话说,如果字段B未更新10秒或更长时间,则应更新该字段。
最后,如果用户点击按钮C,则轮询应停止。
我的问题是:如何运行函数以更新字段B(如果字段B在10秒或更长时间内未更新),以及如何在需要时停止轮询(当用户单击另一个按钮时)?欢迎所有提示!
2个回答

49

使用clearTimeout可以取消计时器,因此:

var timer = null;
if (timer) {
    clearTimeout(timer); //cancel the previous timer.
    timer = null;
}
timer = setTimeout(thisFunction, 10000);

6
var update;

// something happened

clearTimeout(update);
update = setTimeout(thisFunction, 10000);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接