2011-07-20 18 views
5

Buduję system sprzedaży biletów na imprezy. Obecnie istnieje około 1000 różnych miejsc do wyboru jako gość. Maby pewnego dnia będzie to 5000.Zdarzenie click click jQuery na 1000 divs, zoptymalizować podejście?

Teraz mam div dla każdego miejsca, a następnie jQuery, aby zachować miejsce z ajaxem. Tak, że meens, że mam około 1000 div i bardziej alarmujące mój selektor jQuery ustawia zdarzenie click na każdym div.

Czy istnieje lepsze podejście w tej kwestii?

Chcę aktywować ajax po naciśnięciu przycisku div, nie ponownie ładując strony.

+0

Czy możesz zamieścić kod źródłowy? Możemy pomóc Ci zoptymalizować, jeśli to możliwe. – dknaack

Odpowiedz

8

Zastosowanie .delegate():

$("#container").delegate(".child", "click", function(){ 
    alert("Clicked!"); 
}); 

ten sposób będziesz zrobić tylko jedno zdarzenie, które zarządza wszystkimi DIV.

+0

Dzięki! Za tobą i wszystkim, którzy proponowali delegata. –

2

Użyj "delegacji wydarzeń", tzn. Raz związaj zdarzenie click, a nie do każdego div, ale do div, który otacza twoje 1000 div. W module obsługi można pobrać element dla elementu div, który został kliknięty, przez obiekt "zdarzenia" przekazany do obsługi.

+0

+1. To jest właściwy sposób, aby to zrobić. – pederOverland

4

prostu użyć jQuery metodę delegacji:

$('.theater').delegate('.seat','click',function(event){ 
    var self = $(event.target); 
    console.log(self); 
    // self is the '.seat' element that has been clicked. 
}); 
+1

'$ (this)' działa wewnątrz obsługi delegatów i odwołuje się do elementu docelowego, bez potrzeby '$ (event.target)'. –

+0

Ups, zbyt precyzyjne. Zwykle używam funkcji bindowanych ("this" zawsze odnosi się do mojego obiektu View), więc używam '$ (event.target)'. –

1

Podejście to nazywa się delegowaniem zdarzeń i jest tak, jak wyjaśnia Ash. jQuery ma kilka metod, aby pomóc tutaj. live() i nowszy przedstawiciel() http://api.jquery.com/delegate/ który jest nieco bardziej precyzyjny.

Wiąże jedno zdarzenie z kliknięciem z elementem, który jest aparentem wszystkich obiektów div, które są zainteresowane, a kliknięcie na nich powoduje zbuforowanie obiektu DOM w celu przechwycenia przez obiekt nadrzędny. W tym momencie możesz zrobić to, czego potrzebujesz.

Powiązane problemy