요소가 페이지에서 제거되면 자동으로 바인딩 해제됩니까? 아니면 jquery의 바인딩 해제를 사용하여 바인딩을 해제해야하는 시나리오입니까? 당신이 remove
또는 empty
를 사용하여 요소를 제거하면 나는 자동으로 이루어집니다 가정jQuery에서 바인딩 해제
...
요소가 페이지에서 제거되면 자동으로 바인딩 해제됩니까? 아니면 jquery의 바인딩 해제를 사용하여 바인딩을 해제해야하는 시나리오입니까? 당신이 remove
또는 empty
를 사용하여 요소를 제거하면 나는 자동으로 이루어집니다 가정jQuery에서 바인딩 해제
...
는 이벤트 핸들러가 자동으로 메모리 누수를 방지하기 위해 제거됩니다. 그렇지 않으면 요소를 제거하기 전에 명시 적으로 바인딩 해제되지 않은 경우 그대로 유지됩니다.
EDIT : 내부 .cleanData
메서드 (5177 줄에 선언되어 있음)를 호출하여 .html
이 이벤트 핸들러를 제거합니다. 당신은 source에서 확인 가능 :
html: function(value) {
...
for (var i = 0, l = this.length; i < l; i++) {
// Remove element nodes and prevent memory leaks
if (this[i].nodeType === 1) {
jQuery.cleanData(this[i].getElementsByTagName("*"));
this[i].innerHTML = value;
}
}
...
그래서, 메모리 누수를 방지하기 위해, 직접 jQuery를 이벤트 핸들러를 첨부 DOM 요소를 대체 할 innerHTML
를 사용하지 마십시오.
.html ("stuff")를 사용하여 div의 내용을 바꾼다면, 이전에 그 안에 있던 요소들이 바운딩 된 채로 있다는 것을 이해하고 있는가? 나중에 바인드를 해제 할 수 있습니까? 아니면 DOM에서 제거하기 전에 언 바인딩해야합니까? – Matrym
@ karim79 학습 목적으로 만 바인딩 요소와 관련된 메모리 누수를 예로들 수 있습니다. 클릭 또는 마우스 오버 – kobe
@martym .html은 기존의 일부 elemnt에 html을 적용하므로 agian을 바인딩 할 필요가 없습니다. 몇 가지 바인딩이 필요하다면 jquery.live를 사용해야하고 그렇게해야합니다. – kobe
@martym dom에서 elment를 제거하고 페이지를 다시로드하면 해당 요소를 찾을 수 없으므로 다시 바인드되지 않습니다. 그것은 다음 페이지로드에서 발생합니다. – kobe
새로 고침하지 않고 왜 다른 페이지로드를 수행합니까? 나는 당신의 대답에 조금 혼란 스럽다 ... – Matrym