2011-12-17 19 views
16

Jeśli dołączyłem kilka zdarzeń do niektórych elementów DOM - a następnie je usunę - czy nadal będzie używana pamięć używana do obsługi zdarzeń lub innych atrybutów?Czy JavaScript usuwa programy obsługi zdarzeń z usuniętych elementów DOM?

Pytam, ponieważ chcę wiedzieć, czy użyję pęczku pamięci, jeśli uzupełniam obszar strony o nowe elementy z żądań AJAX i zdarzeń wiążących do nich - tylko po to, aby je usunąć i powtórzyć proces, gdy pojawia się nowy wynik AJAX.

+0

Nie jest to bezpośrednia odpowiedź, ale jeśli jesteś ciągle dodawanie nowych elementów i usuwanie starych, polecam korzystania delegacja wydarzenie obsłużyć wydarzenia. To całkowicie omija ten problem. – RightSaidFred

+0

... powiedział, że jeśli to możliwe, spróbuję znaleźć sposób na ponowne wykorzystanie elementów, zamiast je niszczyć i odtwarzać. – RightSaidFred

+0

@RightSaidFred, tak - jeśli elementy były w ogóle powiązane, mogłem ponownie wykorzystać większość wydarzeń za pomocą delegacji. Jednak są to dla mnie zupełnie inne strony. – Xeoncross

Odpowiedz

5

Tak, nowoczesne przeglądarki (ostatecznie) zwalniają pamięć używaną przez procedury obsługi zdarzeń w węzłach DOM. Jednak stare wersje Internet Explorera nie, więc zawsze dobrze jest usunąć detektory zdarzeń przed usunięciem węzłów z DOM.

To jest dobry artykuł dla zrozumienia tego, co się dzieje: http://msdn.microsoft.com/en-us/library/bb250448(v=vs.85).aspx

+6

Niewielki komentarz: błędne zachowanie IE było związane z procedurami obsługi zdarzeń zawierającymi odniesienia do elementów, do których zostały przyłączone. –

+1

Data publikacji tego artykułu to czerwiec 2005. Ta odpowiedź pochodzi z 2011 roku. "Stare wersje Internet Explorera" są nieco niejednoznaczne, ale zakładam, że oznaczałoby to [IE 8] (https://en.wikipedia.org/wiki/ Internet_Explorer_8) lub wcześniej, biorąc pod uwagę, że IE 9 był najnowszą stajnią w 2011 roku. To wciąż jest dla mnie trochę otwarte pytanie ... – efx

Powiązane problemy