>  기사  >  웹 프론트엔드  >  JavaScript의 DOM 개체에서 모든 이벤트 리스너를 제거하는 방법: 종합 안내서

JavaScript의 DOM 개체에서 모든 이벤트 리스너를 제거하는 방법: 종합 안내서

Patricia Arquette
Patricia Arquette원래의
2024-10-25 02:12:30820검색

How to Remove All Event Listeners from a DOM Object in JavaScript: A Comprehensive Guide

Javascript/DOM: DOM 개체에서 모든 이벤트 리스너를 제거하는 방법

질문이 생깁니다. DOM 개체에서 모든 이벤트를 어떻게 완전히 제거할 수 있습니까? div와 같은 객체인가요? 특히 쿼리는 per div.addEventListener('click', eventReturner(), false);.

모든 이벤트 핸들러 제거

를 사용하여 추가된 이벤트와 관련이 있습니다. 요소에서 유형에 관계없이 모든 이벤트 핸들러를 제거하려는 경우 다음 방법을 고려하십시오.

var clone = element.cloneNode(true);

이 기술은 DOM 속성 수정에 영향을 주지 않고 속성과 하위 항목을 보존합니다.

특정 유형의 익명 이벤트 핸들러 제거

또 다른 접근 방식은 RemoveEventListener() 메서드를 활용하는 것이지만 익명 함수를 처리할 때는 작동하지 않을 수 있습니다. 여기서 중요한 문제는 익명 함수로 addEventListener를 호출하면 함수가 호출될 때마다 고유한 리스너가 할당된다는 것입니다. 결과적으로, 동일한 함수 참조를 사용하여 이벤트 핸들러를 제거해도 아무런 효과가 없습니다.

이 제한 사항을 해결하려면 다음 두 가지 대안을 고려하십시오.

  1. 명명된 함수 사용:
function handler() {
     dosomething();
 }

 div.addEventListener('click',handler,false);
  1. 래퍼 함수 만들기:
var _eventHandlers = {}; // somewhere global

const addListener = (node, event, handler, capture = false) => {
   if (!(event in _eventHandlers)) {
     _eventHandlers[event] = []
   }
   _eventHandlers[event].push({ node: node, handler: handler, capture: capture })
   node.addEventListener(event, handler, capture)
 }
...
addListener(div, 'click', eventReturner(), false)

이 접근 방식을 사용하면 래퍼를 만들 수 있습니다. 추가된 이벤트 리스너에 대한 참조를 저장하는 함수입니다. 그런 다음 해당 RemoveAllListeners 함수를 사용하여 이러한 핸들러를 제거할 수 있습니다.

위 내용은 JavaScript의 DOM 개체에서 모든 이벤트 리스너를 제거하는 방법: 종합 안내서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.