2011-12-18 25 views
5

Aktualnie pracuję nad witryną, która ma tysiące linii kodu jQuery, jest tam szczególnie dużo zdarzeń kliknięcia i zastanawiałem się, czy istnieje większa wydajność świadomy, najlepsza praktyka tam dla wiążących zdarzeń kliknięcia lub dowolnego zdarzenia do elementu.Jakie jest najlepsze podejście do wiązania zdarzeń jQuery z elementami

Z pewnością ponad 30 kliknięć zdarzeń na różnych linkach i przedmiotach nie może być dobrze zarejestrowany pod względem wydajności. Używana jest nowa funkcja jQuery 1.7 "on", czy wydarzenia powinny być powiązane z elementem ciała lub czymś, a następnie sprawdzenie sprawi, że element zostanie kliknięty, a następnie zacznie działać? Czy to nie jest problem i wiąże wiele wydarzeń, a nie problem dla nowoczesnej przeglądarki lub wydajności?

+0

Delegacja wydarzeń, oczywiście. Chcesz mieć swoje statyczne elementy kontenera i przeważnie wiążą je z tymi elementami ... Na przykład, jeśli masz pasek narzędzi z przyciskami, potrzebujesz obsługi jednego kliknięcia na samym pasku narzędzi. –

+0

Jak wyjątkowe jest każde zdarzenie po kliknięciu? –

+0

Cóż, to się zmienia. Niektóre zdarzenia kliknięć dotyczą karuzeli, niektóre służą do wyświetlania modów wyskakujących, niektóre służą do przekazywania zdarzeń innym elementom. Powiedziałbym więc, że każde wydarzenie jest dość wyjątkowe. –

Odpowiedz

5

Powiąż elementy z najniższym elementem domowym, który zawiera wszystkie kliknięte elementy.

Więc jeśli istnieje div nazywa foo że zawiera każdego elementu, można by powiedzieć:

$("#foo").on("click", "yourselector", function(){ 
}); 

Jeśli Twoje elementy są rozłożone każdym calu swojej stronie, to by słuchać na samym top:

$(document).on("click", "yourselector", function(){ 
}); 

Jeśli mam rozumiejąc swoje pytanie poprawnie, naprawdę nadzieję, poprzedni deweloper nie zrobić coś takiego:

$("#someButtonId").on("click", function(){ 
    //this defeats the whole purpose of on!!! 
}); 
+0

To jest zawsze jak myślałem, że powinieneś to zrobić. Wydaje się być rzeczą subiektywną, zdecydowanie pomocną. Nie napisałem większości kodu, więc chcę go naprawić i zwiększyć jego wydajność. Wygląda na to, że najlepszym sposobem jest powiązanie zdarzeń z kontenerem wszystkich elementów, które chcesz powiązać. –

+0

Niestety Adam, poprzedni programista wiązał kliknięcia przy użyciu pojedynczych elementów, o których wspomniałeś, dlatego starannie je naprawiam, to koszmarny występ i nie wspominając już o tym, że jest to witryna Magento, która robi trochę niecodziennych rzeczy na twoim znaczniku wbudowane wywołania zdarzeń i inne. –

+0

Zastanawiam się nad użyciem $ (document) .on ("click", "yourselector", function() {dla kodu ze względu na wyjątkowość elementów, ale nie byłem pewien, czy to byłaby zła wydajność dla strony wykonanej całkiem sporo elementów: –

1

Możesz powiązać to samo zdarzenie więcej niż jeden raz na elemencie, ale jeśli masz tylko 30 kliknięć zdarzeń na tym samym łączu, powinieneś zrobić to inaczej. Umieść kod dla wszystkich różnych działań, które chcesz wykonać w pojedynczym module obsługi zdarzeń, zamiast wiązać każdą małą rzeczkę samodzielnie.

Powiązane problemy