에 jQuery 는 경우 요소를 제거 것입니다 모든 이벤트에 그것을 제거할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1538243

  •  20-09-2019
  •  | 
  •  

문제

예를 들어 있는 경우 이 링크는 다음과 같은 이벤트밖에 없다.

$("a.d").bind("click", this, onDelete);

고 나중에 마:

$("a.d").remove();

는 미?또는 메모리 누수가 발생하고 해제 1?

어떤 도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

나는 그것을 테스트하지 않았지만 요소를 제거하면 이벤트 처리기가 풀릴 것이라고 생각합니다. 나는이 결론에 도달했다 jQuery API 문서 (제거를 검색) 요소를 DOM의 한 부분에서 다른 부분으로 옮기려는 경우 :

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

작성해야합니다

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

이벤트 처리기를 잃지 않도록합니다.

다른 팁

에서 jQuery 문서에 대한 제거()

을 제거하는 모든 일치하는 요소에서 DOM.이를 제거하지 않습에서 그들을 jQuery 객체를 사용할 수 있도록, 일치하는 요소를 추가.참고 는 이 기능을 시작으로 1.2.2 또한 모두 제거 처리기 이벤트 내부적으로 캐시 데이터입니다.

이벤트가 jQuery와 함께 첨부 된 한 대답은 그렇습니다. "Onclick"과 같은 것을 첨부하면 나는 그것을 믿지 않습니다.

이 기사에서는 그 중 일부에 대해 설명합니다. 또한 요소 및 모든 어린이에 대한 모든 클릭 이벤트를 제거하는 재귀 기능을 정의합니다. jQuery 클릭 핸들러와 OnClick으로 정의 된 핸들러를 다루므로 커버됩니다.

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

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));
    });
}

이전 예제에서 함수를 사용하려면 "컨테이너"DIV를 전달한 함수를 jQuery 객체로 호출합니다.

RecursiveUnbind($('#container'));

레코드의 경우 JavaScript의 메모리 누출에 대해 걱정할 필요가 없습니다. (C ++가 아니라 냉담한 사람!)

브라우저의 JavaScript 엔진은 모든 객체를 관리하고 쓰레기를 수집합니다. 내가 물체를 말할 때, 그것은 기능이 JavaScript의 개체이기 때문에 이벤트 처리 기능도 의미합니다.

관련이없는 : 나는 모든 것이 어떻게 JavaScript의 대상이되는지를 좋아합니다 : D

건배!
JRH

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top