Wpis z mikrobloga

Witajcie mirki z #webdev
Zazwyczaj grzebię w #php, a w #javascript i #jquery robię tylko proste rzeczy. Jednak teraz w projekcie mam taką sytuację, że muszę zrobić w #js coś bardziej złożonego.
Otóż mam taką sytuację, że na stronie mam głosowanie. Można oddać głos na produkt lub użytkownika. Po prostu użytkownik klika na przycisk i leci zapytanie do bazy danych. Głosować można na 2 sposoby:
1. Od razu na stronie
2. W otwartym lightbox (zawartość lightbox jest ładowania dynamicznie z #ajax)
Ponadto na stronie mam przyciski share facebooka i twittera, które tak samo jak głosowanie są:
1. ładowane od razu se stroną
2. ładowane w lightbox
Mam też możliwość zapisania się do newslettera (znowu używam ajax), ale też mogę zapisać się do newslettera po oddaniu głosu w lighbox.

Otóż sytuacja jest taka, że jak naprawię coś w jednym miejscu, to wykrzacza mi się w drugim, naprawię w drugim miejscu, to wykrzacza się w trzecim itd. w kółko.

Może mi ktoś poradzić w jaki sposób mam zrobić by:
1. Event na elemencie działał w lightbox.
2. Eventy nie dublowały się po otwarciu lightbox.

Może być jakiś tutorial z przykładami lub wystarczy rada w jaki sposób mam to napisać, aby działało poprawnie.
  • 8
@mariecziek: Ciężko jest mi dokładnie pomóc, gdy nie widzę całości na monitorze, ale co do pierwszego punktu - zobacz swoją pierwszą linijkę:

$('.talent-quick-preview, .size-guide, .composition-guide, .delivery-return-guide, .vote, .footwear-preview').click(...)

Tutaj listener jest "nałożony" tylko dla istniejących elementów w DOM, czyli '.talent-quick-preview, .size-guide' itd.
Po załadowaniu danych do lightbox ajaxem to już nie zadziała. Musisz:
a) ponownie utworzyć listener na te elementy
b) zamiast listenera dodanego na te elementy utworzyć inny (tak jak
@anghelus: Z duplikowaniem się requestów poradziłęm tak, że wywaliłem z kodu init_vote(), w którejś z funkcji przez co request wykonuje się tylko raz. Przeczytałem, też o delegacji eventów, o czym pisał @isamaul i wydaje mi się, że to może mi pomóc. Wystarczy tylko używać takich samych klas e elementach, abym nie musiał inicjować JSa po dynamicznym załadowaniu elementów.
O ten artykuł przeczytałem.