Как сбросить тайм-аут в Javascript / jQuery?

У меня есть поле A на моей веб-странице, которое при редактировании пользователем вызывает вызов API (используя jQuery), который обновляет поле B. после редактирования API должен вызываться каждые 10 секунд, чтобы обновить поле B снова. В настоящее время я делаю это через:

setTimeout(thisFunction, 10000);

проблема в том, что этот тайм-аут устанавливается каждый раз, когда пользователь редактирует поле A, которое после редактирования поля a пару раз вызывает тайм-аут несколько раз, а API вызывается много раз. Это делает сайт выглядит довольно напряженно.

то, что я хотел бы сделать, - это установить новый тайм-аут каждый раз, когда поле редактируется, будь то поле редактирования пользователя A или интервал, достигающий 10 секунд, и тем самым опрос API. Другими словами, поле должно быть обновлено, если поле B не обновлялось в течение 10 или более секунд.

наконец, если пользователь затем нажимает кнопку C, опрос должен прекратиться.

Итак, мой вопрос; как я могу запустить функцию для обновления поля B, если это поле B не обновлялось в течение 10 или более секунд, и как остановить опрос, когда я хочу (когда пользователь нажимает другую кнопку), все советы приветствуются!

2 ответов


таймер может быть отменен clearTimeout, так:

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

var update;

// something happened

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