2010-07-06 14 views
14

Mam interfejs użytkownika za pomocą dynamicznych kart, więc zawartość można załadować do karty, a następnie kartę można zamknąć, a zawartość usunąć ze strony.Czy muszę odłączyć zdarzenia w jQuery, gdy usuwam elementy

Po załadowaniu zawartości do karty dołączam wiele zdarzeń do elementów za pomocą jQuery.

Co się stanie, gdy usunę te elementy ze strony? Czy jQuery musi wiedzieć?

Czy ma to również znaczenie, jeśli dołączę wydarzenie wiele razy? Na przykład w moim załadowaniu karty mogę dołączyć wydarzenie za pomocą selektora klasy, takiego jak $('.submitButton').click(...). Ale mogę już mieć otwarte inne zakładki, do których dołączono już zdarzenie submitButton. W tym przypadku ponownie dołączę to samo wydarzenie. Czy jest z tym jakiś problem?

+0

Byłbym ciekawy, dlaczego przytwierdzasz to samo wydarzenie więcej niż raz do elementu. Jeśli robisz dużo wiązania/rozplątania, prawdopodobnie istnieje lepsze podejście. – user113716

Odpowiedz

16

Jeśli użyj metod jQuery .remove() lub .empty(), wyczyści wszystkie zdarzenia (i inne dane), które zostały przypisane do jQuery.

Od docs dla remove():

Oprócz samych elementów, wszystkich związanych zdarzeń i danych jQuery związanych z elementami są usunięte.

i pusty():

Aby uniknąć przecieków pamięci jQuery usuwa inne konstrukcje, takie jak dane i programy obsługi zdarzeń z elementów podrzędnych przed wyjęciem same elementy.

Jeśli korzystasz z natywnych metod API do usuwania, wszystkie dane zostaną zawieszone. Więc lepiej używać metod jQuery.

3

Po usunięciu elementu z .remove() wszystkie powiązane zdarzenia i dane jQuery powiązane z elementem zostaną usunięte.

Inne niż .detach(), który usunie element z DOM, ale zachowuje wszystkie związane z nim dane i zdarzenia w pamięci (co jest przydatne, jeśli chcesz, aby ponownie wstawić ten element w późniejszym czasie)

Powiązane problemy