2011-09-12 4 views
2

jQuery의 라이브 또는 델리게이트 함수를 사용하여 DOM에 삽입 될 미래의 요소에 대한 이벤트 처리기를 만드는 경우 DOM에서 이러한 요소를 제거하기 전에 아무 것도하지 않아도되므로 메모리 누수 유형이 발생하지 않습니다.jquery 라이브 이벤트가있는 요소를 제거하면 메모리 누수가 발생합니까?

요소가 jQuery의 템플릿 플러그인을 통해 추가/제거 될 가능성이 있습니다.

나는 이것에 대한 어떤 확인도 찾지 못했고 확신하고 싶습니다. 감사!

답변

2

번호 방식 live()works 고려 :

핸들러가 요소에 바인딩되지 않습니다 .live()에 전달을; 대신 .live()은 DOM 트리의 루트에 특수 처리기를 바인딩합니다.

에 상관없이 당신이 live() 또는 얼마나 많은 요소가 하나의 핸들러가 생각할 일치 수를 통해 연결 얼마나 많은 핸들러 모든 live() 핸들러 –에 대한 DOM에 부착 된 single event handler function을 없다.

이 함수는 이전에 live()을 호출하여 등록 된 선택기와 일치하는 요소에서 DOM을 불러내는 이벤트가 발생했는지 여부를 확인합니다.

live()에 제공된 선택기와 일치하는 DOM 요소에 실제로 이벤트 처리기가 연결되지 않으므로 해당 요소가 제거되면 메모리 누수가 발생하지 않습니다.

jQuery를 사용하여 요소를 제거 할 때 jQuery가 바운드 이벤트 핸들러를 정리해야한다는 점에 유의하십시오. 누출되는 유일한 방법은 컨테이너에 innerHTML을 설정하여 요소를 제거하는 것입니다.

1

전적으로 확인할 수는 없지만 메모리 누수가 발생하면 매우 놀랄 것입니다.

저는 Live가 작동하는 방식이 문서에 첨부 된 다음 문서에서 이벤트와 일치하는 내용을 검색한다는 것입니다.

$(".element").click과 같은 방식으로 런타임에 생성 된 요소에 이벤트를 첨부하지 않도록하십시오.

관련 문제