이벤트 핸들러 및 이벤트 전파에 대한 모든 것
5803 단어 tutorialwebdevjavascript
이벤트 처리
JavaScript에서 이벤트에 핸들러를 연결하는 방법에는 3가지가 있습니다.
HTML 속성
이것은 DOM 요소에 속성을 추가하여 이벤트에 핸들러를 연결하는 구식 방식입니다.
노드는 하나의 onclick 속성만 가질 수 있음을 기억하십시오. 따라서 이 접근 방식을 사용하면 하나의 핸들러만 이벤트에 등록할 수 있습니다.
<div id="el" onclick="kaboom()"></div>
DOM 속성
이것은 DOM 노드를 즉석에서 생성하고 속성을 추가하고 속성에 핸들러를 연결하는 JavaScript 방식입니다. 이는 앞의 접근 방식과 거의 동일하므로 이벤트에 하나의 핸들러만 등록할 수 있습니다.
<script>
el = document.querySelector("#el")
el.onclick = clickMe();
</script>
addEventListener() 🔥
이것은 핸들러를 이벤트에 바인딩하는 현대적인 방법입니다. 이벤트에 여러 핸들러를 바인딩할 수 있으며 해당 이벤트가 발생할 때 이러한 모든 핸들러가 호출됩니다.
<script>
el.addEventListener("click", (e) => {
// Some code here that goes KABOOM!
});
</script>
이벤트 동작
방지기본값()
연관된 기본 작업이 있는 소수 또는 미리 정의된 이벤트가 있습니다. 예를 들어,
이러한 경우 이러한 요소와 연결된 사용자 지정 핸들러는 기본 작업 다음에 기본 작업이 따라오기 전에 호출됩니다. 요소에서 이 기본 동작을 완전히 바인딩 해제하려면 핸들러에서
event.preventDefault()
를 호출할 수 있습니다.참고: 이것은 이벤트가 DOM을 버블링하는 것을 막을 수 없습니다.
이벤트 버블링 및 이벤트 캡처
DOM의 이벤트는 일반적으로 웹 브라우저에 중첩된 이벤트 스택으로 전파됩니다.
이벤트 버블링
이벤트 버블링은 예를 들어 더 잘 설명할 수 있습니다.
다음과 같이 중첩된 DOM 구조를 취합시다.
<div id="parent">
<div id="child"></div>
</div>
#parent
및 #child
div 모두에 연결된 핸들러가 있는 경우#child
div에 대한 처리기가 호출된 다음 이벤트가 #parent
div로 전파되고 해당 처리기가 호출됩니다. 간단히 말해서 이벤트가 아래에서 위로 버블링될 때 자식이 먼저이고 부모가 다음입니다.
이벤트 캡처
이벤트 캡처는 DOM에서 이벤트를 캡처하고 실행을 위해 이벤트 핸들러에 전달하는 것 이상입니다. 이벤트는 하향식에서 캡처됩니다. 즉, 가장 바깥쪽 요소가 먼저 캡처되고 내부 요소로 전파됩니다. 이벤트가 캡처되면 가장 안쪽에 있는 요소에서 이벤트 버블링이 시작됩니다.
stopPropagation()
자식 이벤트 핸들러에서
event.stopPropagation()
를 호출하여 자식에서 부모로 이벤트 버블링을 중지할 수 있습니다.function childHandler(event) {
event.stopPropagation();
}
이벤트 리스너 제거
이벤트 이름과 핸들러 이름을 인수로 받아들이는 이벤트를 호출하여removeEventListener()
요소에서 이벤트 리스너를 제거할 수 있습니다.
function handleClick(e) {
// go KABOOM!
}
element.addEventListener("click", handleClick);
element.removeEventListener("click", handleClick);
참고: 익명 처리기 메서드를 사용하지 마십시오. 콜백 외부에서 함수를 정의한 다음 removeEventListener 콜백에서 다시 참조해야 합니다.
// this is wrong as you cannot remove this event listener
element.addEventListener("click", () => { /* go KABOOM! */ });
그게 다야. 이 게시물이 어떤 식으로든 개선될 수 있다고 생각되면 댓글을 남겨주세요.
Reference
이 문제에 관하여(이벤트 핸들러 및 이벤트 전파에 대한 모든 것), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/ruphaa/everything-about-event-handlers-and-event-propagation-47a8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function handleClick(e) {
// go KABOOM!
}
element.addEventListener("click", handleClick);
element.removeEventListener("click", handleClick);
// this is wrong as you cannot remove this event listener
element.addEventListener("click", () => { /* go KABOOM! */ });
Reference
이 문제에 관하여(이벤트 핸들러 및 이벤트 전파에 대한 모든 것), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ruphaa/everything-about-event-handlers-and-event-propagation-47a8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)