setTimeout
возвращает значение («ручка таймера»), которое является числом, отличным от 0
. Вы можете отменить таймер, передав это значение clearTimeout
до истечения таймаута.
Таким образом, вы можете помнить дескриптор таймера для одного или обоих таймеров, которые вы запланировали (в зависимости от того, что вам нужно), и когда что-то происходит, что заставляет вас отменить один из этих таймеров, вызовите clearTimeout
с соответствующим ручка.
Вы попросили пример. Так как это все-таки совершенно непонятно мне, что вы хотите отменить, когда я возьму догадку: Вы хотите позвонить в overall
отменить любой отложенный вызов mobile
и наоборот:
// Variables to hold the timers
var overallTimer = 0,
mobileTimer = 0;
function overall(){
// If a pending call to mobile exists, cancel it
if (mobileTimer) {
clearTimeout(mobileTimer);
mobileTimer = 0;
}
$(".one").show();
$(".two").hide();
$(".three").hide();
$(".four").hide();
// Schedule a call to ourselves, remember the timer handle
overallTimer = setTimeout(overall,1000);
}
function mobile(){
// If a pending call to overall exists, cancel it
if (overallTimer) {
clearTimeout(overallTimer);
overallTimer = 0;
}
$(".one").hide();
$(".two").show();
$(".three").hide();
$(".four").hide();
// Schedule a call to ourselves, remember the timer handle
mobileTimer = setTimeout(mobile,1000);
}
Вы можете складировани таймеры по функциям, если вам понравилось, хотя на самом деле это вас не очень дорого:
function overall(){
// If a pending call to mobile exists, cancel it
if (mobile.timer) {
clearTimeout(mobile.timer);
mobile.timer = 0;
}
$(".one").show();
$(".two").hide();
$(".three").hide();
$(".four").hide();
// Schedule a call to ourselves, remember the timer handle
timer = setTimeout(overall,1000);
}
overall.timer = 0;
function mobile(){
// If a pending call to overall exists, cancel it
if (overall.timer) {
clearTimeout(overall.timer);
overall.timer = 0;
}
$(".one").hide();
$(".two").show();
$(".three").hide();
$(".four").hide();
// Schedule a call to ourselves, remember the timer handle
mobile.timer = setTimeout(mobile,1000);
}
mobile.timer = 0;
Вы можете проверить, был ли установлен тайм-аут? – jsedano
вы не отслеживаете таймер, вы должны назначить возврат 'setTimeout' переменной вне сферы действия функции. – Emissary
Можете ли вы привести мне пример? –