2009-10-08 2 views

답변

4

아직 테스트하지 않았지만 요소를 제거하면 해당 이벤트 처리기가 바인딩 해제됩니다. 나는 내용의 jQuery API documentation (제거 검색)에서이 결론에 도달 당신은 DOM의 한 부분에서 다른 것과 요소를 이동하려면 :

$("#foo").remove().appendTo("#bar"); 

$("#foo").appendTo("#bar"); 
로 작성해야

이벤트 핸들러 유실을 피하십시오. 제거 용의 jQuery 문서에서

6

()

는 DOM 모든 유사한 요소를 제거한다. 이 경우 에서 jQuery 객체가 제거되지 않으므로 요소를 더 사용할 수 있습니다. 이 함수는 1.2.2 으로 시작하여 모든 이벤트 처리기 과 내부적으로 캐시 된 데이터도 제거합니다.

+0

+1 "insider info": – jrharshath

-2

기록을 위해 자바 스크립트에서 메모리 누수가 걱정할 필요가 없습니다. (냉기, C++ 아닙니다!)

브라우저의 javascript 엔진이 모든 객체를 관리하고 가비지 수집합니다. 객체를 말하면 함수도 자바 스크립트의 객체이므로 이벤트 처리 함수를 의미합니다.

관련없는 : D

건배 : 나는 모든 자바 스크립트 객체가 얼마나 사랑 해요!
jrh

+0

클로저를 만들면 실제로 자바 스크립트에서 메모리 누출을 쉽게 만들 수 있습니다. 가난한 이벤트 관리는 메모리 누수가 자주 발생하는 곳입니다.특정 js 엔진이 다른 것보다 낫습니다. 예를 들어 Chrome의 V8은 클로저를 제대로 수집하지 못하는 것처럼 보입니다. 그러나 파이어 폭스 (적어도 3.0, 그것을 시도하지 않은 3.5), IE는 할 수 있고 자바 스크립트에서 메모리 누수가 있습니다. –

+0

참고하시기 바랍니다 내가 전에 알고 있기 때문에 나는 그것에 대해 (내가 그것에 대해 그것에 관해서 물어 보았 기 때문에 내가 아는 이유는 내 오래된 질문을 참조하십시오 : http://stackoverflow.com/questions/276087/preventing-ajax-memory- 누수) –

+0

-1 C++이 아니지만 메모리가 누출 될 수 있습니다. –

0

이벤트가 jQuery와 연결되어있는 한 대답은 예입니다. "onclick"과 같은 것이 붙어 있다면 나는 그것을 믿을 수 없다.

이 기사에서는 그 중 일부에 대해 설명합니다. 또한 요소 및 모든 하위 항목에 대한 모든 클릭 이벤트를 제거하는 재귀 함수를 정의합니다. jQuery 클릭 핸들러는 물론 onclick으로 정의 된 핸들러를 다루므로 커버 할 수 있습니다.

function RecursiveUnbind($jElement) { 
    // remove this element's and all of its children's click events 
    $jElement.unbind(); 
    $jElement.removeAttr('onclick'); 
    $jElement.children().each(function() { 
     RecursiveUnbind($(this)); 
    }); 
} 

http://www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/

우리가 jQuery를 객체로서에게 "용기"DIV를 통과하는 함수를 호출 할 것이다 앞의 예에서 함수를 사용합니다.

RecursiveUnbind($('#container')); 
관련 문제