인라인 attribute 이벤트 핸들러
, 속성 이벤트 핸들러
, addEventListener()
메서드를 사용하여 수행될 수 있다. 이 중에서 addEventListener() 사용이 권장된다.removeEventListener()
메서드를 사용하여 이벤트 수신기를 제거할 수 있다.기본적으로 이벤트에서 호출되는 핸들러나 콜백 함수에는 이벤트와 관련된 모든 정보를 갖고 있는 매개변수가 전송된다.
event.currentTarget
속성을 사용해도 this 속성이 제공하는 것과 동일하게 참조를 얻을 수 있다. event.target
속성은 이벤트가 발생된 노드나 개체(즉, 대상)에 대한 참조를 제공한다. 이벤트 흐름에서 이벤트의 진원지를 파악할 때 유용하다. preventDefault()
메서드를 호출해서 막을 수 있다. stopImmediatePropagation()
메서드를 호출하면, 이벤트 흐름 단계를 중지시키는 것뿐만 아니라, 이 메서드를 호출한 이벤트 수신기 이후에 연결되어 호출되는 이벤트 대상의 다른 유사 이벤트도 중지시킨다.stopImmediatePropagation()
을 사용하더라도 기본 이벤트는 막지 않으므로, preventDefault()
를 추가로 호출해야만 브라우저 기본 이벤트를 막을 수 있다.document.createEvent()
, initCustomEvent()
, dispatchEvent()
를 조합해서 사용하면 사용자 정의 이벤트를 addEventListener에 연결해서 호출할 수 있다.<!DOCTYPE html>
<html lang="ko">
<body>
<div>Click me</div>
<script>
const divElement = document.querySelector("div");
// 사용자 정의 이벤트 생성
const myCustomEvent = document.createEvent("CustomEvent");
// 사용자 정의 이벤트에 대한 이벤트 수신기 생성
divElement.addEventListener(
"anything",
function (event) {
console.log(event.detail.anythingIs);
},
false
);
// initCustomEvent 메서드를 사용하여 사용자 정의 이벤트를 상세히 설정한다.
// initCustomEvent 매개변수는 'event, bubble?, cancelable?, event.detail로 전달될 값'이다.
myCustomEvent.initCustomEvent("anything", true, false, {
anythingIs: "Hello World",
});
// dispatchEvent를 사용하여 사용자 정의 이벤트 호출
divElement.dispatchEvent(myCustomEvent);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<body>
<table border="1">
<tbody>
<tr>
<td>row 1 column 1</td>
<td>row 1 column 2</td>
</tr>
<tr>
<td>row 2 column 1</td>
<td>row 2 column 2</td>
</tr>
<tr>
<td>row 3 column 1</td>
<td>row 3 column 2</td>
</tr>
<tr>
<td>row 4 column 1</td>
<td>row 4 column 2</td>
</tr>
<tr>
<td>row 5 column 1</td>
<td>row 5 column 2</td>
</tr>
<tr>
<td>row 6 column 1</td>
<td>row 6 column 2</td>
</tr>
</tbody>
</table>
<script>
document
.querySelector("table")
.addEventListener("click", function (event) {
if (event.target.tagName.toLowerCase() === "td") {
console.log(event.target.textContent);
}
});
</script>
</body>
</html>
Reference
- DOM을 깨우치다(코디 린들리 / O'REILLY)