2010-08-12 7 views
7

저는 jscript/javascript 개발에 참여하는 액션 스크립트 개발자입니다. 이벤트 처리기와 바인딩/바인딩 해제에 관한 질문이 있습니다.JQuery 이벤트 핸들러 정리하기

예를 들어 div에 onerror 이벤트 처리기가있는 img 요소가 있다고 가정 해 보겠습니다. 그 div 새 것으로 교체 할 경우 img 요소에 바인딩 된 eventhandler 제거해야합니다. img가 더 이상 문서에 없기 때문에 브라우저는 브라우저를 지울만큼 똑똑 할 것입니까? 아니면 메모리 누수가 발생합니까?

대본에서 나는 보통 오래된 이벤트 처리기를 끊임없이 제거하려고합니다. 그래서 내가 웹 브라우저를위한 자바 스크립트를 작성할 때 이것을해야합니까? 그것이 가장 좋은 방법은의 여부에 관한

이벤트 핸들러

는 모든 활성 이벤트 리스너 및 jquery.data()를 보여줍니다 자사의 파이어 폭스 플러그인, firequery를 사용해보십시오

나는 또한 궁금 $('imgElement').error(errorFunction);

+0

이벤트 처리기는 어떻게 추가됩니까? –

답변

10

이벤트를 jQuery로 바인딩하는 경우 교체하기 전에 이전 요소에 .remove()을 호출하기 만하면됩니다. 아니면 지우기 만하려는 경우 .empty()을 호출하면 두 가지 정리 이벤트 핸들러가 그 요소와 그것의 자녀, 또는 t 그가 .empty()의 경우, 단지 아이들.

방금 ​​교체 한 경우, 예 : .html(content) 해당 요소의 핸들러 또는 데이터는 $.cache 개체에 남아 있으므로 누수 메모리가됩니다.

+2

.html (내용)이 메모리 누출을 알지 못했습니다! 감사! – Patricia

+0

정말입니까? jQuery 소스 코드를 살펴보면, manipulation.js 줄 203 : "// 요소 노드를 제거하고 메모리 누수를 막으십시오." – Phil

+0

@ phil- 전에 코드를 살펴보면 다음과 같은 몇 가지 조건이 있음을 알 수 있습니다. 그 코드가 실행됩니다 :) SO 채팅 첫 번째 미리보기에서 동일한 메모리 누수 문제가 있었는데, 이것이 원인이었습니다. –

0

에 추가 이벤트를 바인딩 해제하는 중 ...