
지정된 EventTarget이벤트가 대상에 전달될 때마다 호출되는 함수를 설정
메서드 방법
addEventListener(type, listener)
addEventListener(type, listener, options)
addEventListener(type, listener, useCapture)
listener 전에 이 유형의 이벤트가 등록된 이벤트로 전송되는지 여부를 나타내는 부울 값 EventTarget
1. HTML 속성: onclick="...".
2. DOM 프로퍼티: elem.onclick = function.
3. 메서드: elem.addEventListener(event, handler[, phase])로 핸들러를 추가하고, removeEventListener 로 핸들러를 제거함
✔️HTML은 속성, DOM은 프로퍼티라고 하는 이유?
HTML 속성 : 인수로 element가 가지고 있는 것을 의미
코드가 길어지면 함수를 만들어서 호출하는 방법 추천<input value="abc" /> // attribute는 value="abc"// onclick 속성에 click 핸들러 할당 <input value="클릭해 주세요." onclick="alert('클릭!')" type="button"><script> function countRabbits() { for(let i=1; i<=3; i++) { alert(`토끼 ${i}마리`); } } </script> <input type="button" onclick="countRabbits()" value="토끼를 세봅시다!">
- 정적인 속성
- 특성은 항상
name=”value”의 형태- 대소문자 구분하지 않는다
DOM 프로퍼티 : 생성된 함수 DOM 프로퍼티에 할당- 동적인 속성
- html dom tree안에 있고, javascript에 의해 생성되고 조작된다
- 대소문자 구분한다
https://developer.mozilla.org/ko/docs/Glossary/Attribute
DOM 이벤트에서 정의한 이벤트 흐름엔 3가지 단계
= 이벤트 전파(Event Propagation)
+event.eventPhase : 현재 이벤트 흐름 단계(1,2,3)
1. 캡처링 단계 – 이벤트가 하위 요소로 전파되는 단계
2. 타깃 단계 – 이벤트가 실제 타깃 요소에 전달되는 단계
3. 버블링 단계 – 이벤트가 상위 요소로 전파되는 단계

✔️캡처링
최상위에서 아래로 전파되는 과정
✔️버블링
한 요소 이벤트가 발생하면, 부모 요소 핸들러도 동작
가장 최상단 조상 요소 만날 때까지 과정 반복(심지어 몇몇 이벤트는 window객체까지 거슬러 올라간다)
요소 각각 할당된 핸들러가 동작
<style>
body * {
margin: 10px;
border: 1px solid blue;
}
</style>
<form onclick="alert('form')">FORM
<div onclick="alert('div')">DIV
<p onclick="alert('p')">P</p>
</div>
</form>

알림창이 p, div, form 3번 나온다
→ 이벤트 버블링이라고 부른다
❗️거의 모든 이벤트가 버블링 된다
focus 이벤트와 같이 버블링 안 되는 이벤트도 있다
하지만 대부분은 버블링이 된다