Zrušení časovače

Řada e-mailových aplikací umí zprávu vzít zpět: po kliknutí na Odeslat pár sekund počká, a když mezitím kliknete na Zpět, zpráva se vůbec neodešle. Je to časovač, který jde zrušit.

setTimeout() vrací číslo, identifikátor (id) časovače. Uložte si ho do proměnné a pak můžete časovač zrušit funkcí clearTimeout(): jeho funkce se už nespustí.

let casovacOdeslani;

tlacitkoOdeslat.addEventListener("click", function () {
    stavText.textContent = "Odeslání za 3 sekundy…";
    casovacOdeslani = setTimeout(function () {
        stavText.textContent = "Odesláno.";
    }, 3000);
});

tlacitkoZpet.addEventListener("click", function () {
    clearTimeout(casovacOdeslani);
    stavText.textContent = "Neodesláno.";
});

Proměnná casovacOdeslani je vytvořená mimo obě obsluhy, aby ji mohly používat obě: jedna do ní časovač uloží, druhá ho zruší. To je pravidlo, které znáte z počítadla kliknutí. Vytváří se pomocí let, protože každé kliknutí na Odeslat do ní uloží nový časovač. Na začátku nemá žádnou hodnotu, je v ní tedy undefined, a clearTimeout(undefined) prostě nic neudělá. Kliknutí na Zpět dřív než na Odeslat proto žádnou chybu nezpůsobí.

Časté chyby:

  • const casovacOdeslani = setTimeout(...) uvnitř obsluhy tlačítka Odeslat: proměnná pak existuje jen v této obsluze a obsluha tlačítka Zpět skončí chybou ReferenceError: casovacOdeslani is not defined.
  • clearTimeout() zruší jen ten časovač, jehož id dostane. Když se na Odeslat klikne dvakrát, běží dva časovače a v proměnné je uložený jen ten druhý.

Pokyny

Zprovozněte tlačítko Přerušit start. Nad obsluhou vytvořte pomocí let proměnnou casovacStartu a uložte do ní časovač, který nastavuje obsluha tlacitkoStart. Když se klikne na tlacitkoPrerusit, zrušte časovač pomocí clearTimeout() a v prvku stavText ukažte Start přerušen.

Zkuste dvakrát kliknout na Odstartovat a pak na Přerušit start: raketa stejně odstartuje. Každé kliknutí nastavilo vlastní časovač a v casovacStartu je jen ten druhý. Opravte to: na začátku obsluhy tlacitkoStart zrušte předchozí časovač pomocí clearTimeout(casovacStartu).

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

Zpět

3/9

Další