Na dynamické stránce chci zakázat a později znovu povolit sekce. Vizuálně jsou zašedlé, ale musí uživatelům zabránit v hraní si s sekcí až později.
U prvků používajících spouštěče po kliknutí by chtělo:
- uložte aktuální spouštěč po kliknutí do atributu
- odebrat aktuální spouštěč po kliknutí
- přidat spouštěč, který není výchozí a nepropagovaný
pro opětovné povolení:
- zbavte se spouštěče bez výchozího nastavení
- znovu použijte dříve uložené pravidlo
- vymazat atribut, kam byl uložen
Z dosavadních odpovědí:
domněnka: pomocí čisté úrovně JavaScriptu html5, bez delegování nebo nějakého jiného externího mechanismu, není možné extrahovat spouštěč při kliknutí z prvku.
Řešení
bylo velmi pokoušen delegacemi – a byl poražen tím, že nebyl schopen zabránit únikům paměti. nakonec to stejně udělal, s jednoduchým gc, aby to udělal.
rozšiřuje (add|remove)EventListener o (add|push|pop|remove)PopableEventListener, takže změna kódu je triviální. umožňuje mi posouvat a rozšiřovat posluchače na jakoukoli úroveň – skvělé pro změny kontextu formy jiné než pouze povolení/zakázaní.
zdroj:http://code.google.com/p/chess-spider/source/browse/http/scripts/popable.js
doc:http://code.google.com/p/chess-spider/wiki/PopableEventListener?ts=1303738300&updated=PopableEventListener
Redakce
Na rozdíl od většiny, co jsem viděl, by možnost přístupu k posluchačům v domku byla významným přínosem; kromě možnosti rozumně deaktivovat opětovné zapnutí by byla neuvěřitelně užitečná možnost přimět je k jinému rozsahu.
Odpověď
Nejlepší způsob, jak zvládnout stovky spouštěčů, je použít delegování událostí.
Poté prozkoumáte každé kliknutí, zda odpovídá vašemu spouštěči. Pokud se jedná o potomka zakázané sekce, zahodíte kliknutí.
Implementace jQuery by vypadala takto:
$('.trigger', document.body).live('click', function(e) { var target = $(e.target); if (target.parents('.disabled').length > 0) { // handle click } });
Samozřejmě můžete použít jiné frameworky nebo prostý JavaScript, jak vám to nejlépe vyhovuje.