Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- EmbeddedId
- sendFractionalSeconds
- 버전 문자열 비교
- RootGraph
- yml
- 1*1000
- fractional seconds
- 운동해서 광명찾자
- mysql equal null
- https
- apatch poi
- getDateCellValue
- 티스토리챌린지
- MSSQL
- pooled-lo
- MYSQL
- createEntityGraph
- load order
- mysql not equal null
- spring boot
- +9:00
- deserializer
- 오블완
- mysql =
- NamedEntityGraph
- getEntityGraph
- Protecle
- @EntityListeners
- @CreateDate
- AuditingEntityListener
Archives
- Today
- Total
Hello
[javascript] 이벤트 전파(버블링) 본문
728x90
동료분이 아래 와 같은 구조의 html을 작성하고 해당 영역 클릭 시 a에 이벤트를 추가해 a의 엘리먼트를 받기를 기대으나, div 엘리먼트가 리턴되어 이해가 안된다고 하셔 event.target이 아닌 event.currentTarget 속성을 사용해보길 전달드렸다.
왜 이건 되냐 되물어보셔서 정확하게 알고 있지는 않고 여러 속성을 호출해 보다 알게되어 이번기회에 내용을 정리하려고 한다.
문제?
a클릭 시 a event에 div요소가 리턴됨.
<a id="aTag">
<div id="divTag"> ...
</div>
</a>
<script>
document.getElementById('aTag').addEventListener('click', event => {
console.log(event.target);
});
</script>
해결?
동료분이 a 태그를 클릭했다고 생각한이유는 이미지와 같이 a가 div를 감싸고 있다고 생각하고 계셨기 때문입니다.
div에 이벤트가 없기 때문에 a 이벤트가 바로 호출되어 a태그 요소가 리턴될 것이라고 기대한 것입니다.
- 방법1
- event.currentTarget을 호출해 이벤트가 부착된 실제 요소를 가리킵니다.
+)event.target은 이벤트가 발생한 요소를 가리킵니다.
- event.currentTarget을 호출해 이벤트가 부착된 실제 요소를 가리킵니다.
- 방법2
- this 호출 (위와 동일하게 이벤트 핸들러가 부착된 요소를 가리킵니다.)
HTML 이벤트 흐름
HTML 문서는 트리 구조로 구성됩니다. <a> 태그는 부모 요소이고, <div> 태그는 자식 요소입니다. 이 계층구조는 이벤트가 발생할 때 중요한 역할을 합니다.
이벤트 흐름에는 두 가지 캡처링과 버블링 단계가 있습니다.
- 캡처링 단계: 이벤트가 최상위 요소에서 시작하여 이벤트가 발생한 요소까지 내려갑니다.
- 버블링 단계: 이벤트가 발생한 요소에서 시작하여 최상위 요소까지 올라갑니다.
기본적으로 이벤트는 버블링 단계에서 처리됩니다. 즉, 이벤트가 발생한 요소에서 시작하여 부모 요소로 전파됩니다.
이벤트 버블링 과정
- 사용자가 <div> 태그를 클릭합니다.
- 클릭 이벤트가 발생하고, 이벤트 객체가 생성됩니다.
- 이벤트 객체의 target 속성은 클릭된 요소인 <div>를 가리킵니다.
- 이벤트는 버블링 단계에서 부모 요소인 <a> 태그로 전파됩니다.
- <a> 태그에 부착된 이벤트 핸들러가 실행됩니다.
- 이벤트 핸들러에서 event.target을 출력하면, 클릭된 요소인 <div>가 출력됩니다.
이벤트 객체 생성 과정
- 이벤트 발생: 사용자가 <div> 요소를 클릭합니다.
- 이벤트 객체 생성: 브라우저는 클릭 이벤트를 감지하고, 이벤트 객체를 생성합니다. 이 객체는 클릭된 요소(target), 이벤트 타입(type), 이벤트가 발생한 좌표 등 다양한 정보를 포함합니다.
- 이벤트 전파: 생성된 이벤트 객체는 이벤트 전파 과정을 통해 상위 요소로 전달됩니다. 이 과정에서 이벤트 객체는 동일하게 유지됩니다.
- 이벤트 핸들러 호출: 이벤트가 핸들러에 도달하면, currentTarget 속성이 설정됩니다. 이 속성은 이벤트 핸들러가 부착된 요소를 가리킵니다.
<div> 요소에 직접 이벤트 핸들러가 부착되지 않았더라도, 이벤트 객체는 클릭된 요소에 대한 정보를 포함하고 있으며, 이를 통해 event.target이 <div>를 가리키게 됩니다.
event.currentTarget은 이벤트가 핸들러에 도달할 때 설정됩니다.
728x90
'기타' 카테고리의 다른 글
[javascript] jQuery.sumoselect (0) | 2024.11.08 |
---|---|
[JAVASCRIPT] 파일 데이터 -> binary data (0) | 2024.03.11 |
[JavaScript] BroadcastChannel API (0) | 2024.02.01 |
[JavaScript] SSE + Spring SseEmitter (0) | 2024.01.17 |
gradle, maven denpendencies 경로 확인 (0) | 2023.12.10 |