Autor Zpráva
snazimse
Profil
Zdravím,

dá se v čistém javascriptu detekovat pouze jeden klik.Abych si to dal do podmínky

V jquery to jde snadno pomocí funkce .one().
Ale dá se něco takového použít v čistém JS? Přemyšlím že by se to dalo udělat,
možní přes count times,je to dobré řešení? Pak podmínky? Nebo znáte někdo něco lepšího.
Bylo by to správně?


Díky všem za reakce!
Jan Tvrdík
Profil
snazimse:
var handler;
el.addEventListener('click', handler = function() {
    el.removeEventListener('click', handler);
    ...
});
Chamurappi
Profil
Reaguji na Jana Tvrdíka:
To je zbytečně užvaněné a nefunguje ve všech prohlížečích (ve starších Explorerech kvůli nepodpoře addEventListeneru, v ostatních starších prohlížečích kvůli chybějícímu třetímu argumentu).


Reaguji na snazimse:
el.onclick = function()
{
  el.onclick = null;
  // ...
};
snazimse
Profil
Díky to mi bohatě stačí!
joe
Profil
Chamurappi:
Tvůj kód bude určitě fungovat, ale co když je plugin, který přiřazuje onclick také? Tak mu ho odstraníš, není lepší způsob přes event listenery (samozřejmě s kompatibilitou pro prohlížeče), protože takhle to může způsobit klidně v budoucnu nějaký problém, ne?
Chamurappi
Profil
Reaguji na joa:
Stejně tak může v budoucnu způsobit problém, že nebudu moct (třeba všechna) zpracování události odebrat, nebo že některý z listenerů změní stav stornování výchozí akce, nebo že zastaví bublání.
Listenery používám jen u objektů, kde nějaká kolize opravdu hrozí (jako je window) a někdy ani tam ne. Je s tím zbytečné patlání a obecné řešení kolizních situací to stejně není, protože nejsou domyšlené.

ale co když je plugin
Nerozumím, co je ve vztahu ke stránce plugin.
joe
Profil
Chamurappi:
Nad odebráním událostí jsem moc nepřemýšlel, buď je to tím, že jsem takový problém ještě neřešil a nebo že si i myslím, že odebírat událost komponentě (netradičním způsobem, mimo ni) není hezké. Komponentou myslím v tomto případě element, se kterým počítá určitý kus kódu. (Sama o sobě by teda měla umožnit zastavit události a znovu je pak přiřadit)

Pluginem jsem myslel kódy třetích stran (lightbox, carousel, ...), nikdy nikdo dopředu neví, jaký plugin se v budoucnu do stránky přidá a zjišťovat, kde je problém, (například při globální práci s událostmi) se může celkem protáhnout.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: