반응형
요소에서 모든 리스너를 제거하는 방법? [복제]
이 질문에는 이미 답변이 있습니다.
버튼이 있는데 버튼을 추가 eventlistners
했습니다.
document.getElementById("btn").addEventListener("click", funcA, false);
document.getElementById("btn").addEventListener("click", funcB, false);
document.getElementById("btn").addEventListener("click", funcC, false);
document.getElementById("btn").addEventListener("blur" , funcD, false);
document.getElementById("btn").addEventListener("focus", funcE, false);
<button id="btn">button</button>
나는 그들을 제거 할 수 있습니다 :
document.getElementById("btn").removeEventListener("click",funcA);
모든 리스너를 한 번에 제거하려면 함수 참조 ( funcA
) 가없는 경우 어떻게합니까? 그렇게하는 방법이 있습니까, 아니면 하나씩 제거해야합니까?
가장 빠른 방법은 노드를 복제하여 모든 이벤트 리스너를 제거하는 것입니다.
var old_element = document.getElementById("btn");
var new_element = old_element.cloneNode(true);
old_element.parentNode.replaceChild(new_element, old_element);
문제가되는 노드의 모든 하위 요소에 대한 이벤트 리스너도 지워 지므로주의해서 리스너를 유지하려면 한 번에 하나씩 리스너를 명시 적으로 제거해야합니다.
jquery와 반대되는 경우 한 줄로 수행 할 수 있습니다.
jQuery 1.7 이상
$("#myEl").off()
jQuery <1.7
$('#myEl').replaceWith($('#myEl').clone());
예를 들면 다음과 같습니다.
http://jsfiddle.net/LkfLezgd/3/
다음은 또한 기반 기능 cloneNode
이지만 부모 노드 만 복제하고 모든 자식을 이동하여 이벤트 리스너를 유지하는 옵션이 있습니다.
function recreateNode(el, withChildren) {
if (withChildren) {
el.parentNode.replaceChild(el.cloneNode(true), el);
}
else {
var newEl = el.cloneNode(false);
while (el.hasChildNodes()) newEl.appendChild(el.firstChild);
el.parentNode.replaceChild(newEl, el);
}
}
한 요소에서 이벤트 리스너를 제거하십시오.
recreateNode(document.getElementById("btn"));
요소와 모든 하위 요소에서 이벤트 리스너를 제거하십시오.
recreateNode(document.getElementById("list"), true);
객체 자체를 유지해야하므로 사용할 수없는 경우이 답변 과 같이 함수 cloneNode
를 래핑 addEventListener
하고 리스너 목록을 직접 추적해야합니다 .
참고 URL : https://stackoverflow.com/questions/9251837/how-to-remove-all-listeners-in-an-element
반응형
'Programming' 카테고리의 다른 글
작업 표시 줄과 새로 도입 된 도구 모음의 차이점은 무엇입니까? (0) | 2020.05.18 |
---|---|
.pid 파일이란 무엇이며 무엇을 포함합니까? (0) | 2020.05.18 |
libpthread.so.0 : 기호 추가 오류 : 명령 줄에 DSO가 없습니다. (0) | 2020.05.18 |
C #에서 비동기 메소드를 어떻게 작성합니까? (0) | 2020.05.18 |
데이터베이스 대신 데이터 저장소에서 생각하는 방법? (0) | 2020.05.18 |