zpět k lekci

Které handlery se spustí?

důležitost: 5

V proměnné je tlačítko, na kterém není žádný handler.

Které handlery se po vykonání následujícího kódu spustí kliknutím na tlačítko? Které zprávy se zobrazí?

tlačítko.addEventListener("click", () => alert("1"));

tlačítko.removeEventListener("click", () => alert("1"));

tlačítko.onclick = () => alert(2);

Odpověď zní: 1 a 2.

První handler se spustí proto, že nebyl odstraněn funkcí removeEventListener. Abychom handler odstranili, museli bychom předat přesně tutéž funkci, která byla přiřazena. V kódu je však předána nová funkce, která vypadá stejně, ale přesto je to jiná funkce.

Abychom odstranili objekt funkce, museli bychom si uložit odkaz na něj, například:

function handler() {
  alert(1);
}

tlačítko.addEventListener("click", handler);
tlačítko.removeEventListener("click", handler);

Handler tlačítko.onclick funguje nezávisle a navíc k addEventListener.