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
- vitepwa
- 싸피셜
- pwa적용하기
- 싸피
- unionfind
- 알고리즘
- 데코레이터
- 14658
- 싸피10기
- js
- QuerySetAPI
- Python
- TypeScript
- SSAFY
- Django
- PWA
- 플로이드워셜
- 머신러닝종류
- VITE
- react
- sqld
- queryset
- Javascript
- SQL
- db
- git
- 백준
- SSAFYcial
- 셀프넘버
- 리액트
Archives
- Today
- Total
Meme's IT
[JS] 이벤트 본문
# 웹에서의 이벤트란?
무언가 일어났다는 신호, 사건
- 버튼을 클릭했을 때 팝업 창이 출력되는 것
- 마우스 커서에 위치에 따라 드래그하는 것
웹은 이벤트를 통해 특정 동작을 수행
모든 DOM 요소는 이벤트를 만들어 냄
event object
DOM에서 이벤트가 발생했을 때 생성되는 객체
종류 매우 많음 → mdn 찾아서 쓰기
DOM요소는 event를 받고, event handler를 이용해서 event를 처리한다.
# event handler
이벤트가 발생했을 때 실행되는 함수
.addEventListenr()
:대표적인 이벤트 핸들러
EventTartget.addEventListener(type, handler)
- 특정 이벤트를 DOM 요소가 수신할 때마다 콜백 함수를 호출
- type: 수신할 이벤트 이름, 문자열로 작성
- handler: 콜백 함수, Event object를 유일한 매개변수로 받음, 반환은 없음
- 써보기
// 버튼 선택
const btn = document.querySelector('#btn')
// 버튼에 이벤트 핸들러 부착
btn.addEventListener('click',function (event) {
console.log(event) // PointerEvent
console.log(event.target) // 버튼
console.log(event.currentTarget) // 버튼
console.log(this) // 버튼
})
- 이벤트 핸들러에서
this
는 강제로 부착된 대상을 가르키도록 설정되어있다, 단 화살표 함수면 안 됨
const clickCallbackFun = function(event) {
console.log(event)
console.log(event.target)
console.log(event.currentTarget)
console.log(this)
}
btn.addEventListener('click', clickCallbackFun)
- 콜백 함수를 따로 작성해도 된다 → 유지보수에 좋음
다음과 같은 p ⊂ div ⊂ form의 구조를 가진 요소가 있을 때,
각각의 요소를 클릭하면 어떤 요소를 클릭했는지
알려주는 핸들러를 붙여주고
p 태그를 선택했을 때, 결과가 어떻게 나올까?
const formElement = document.querySelector('#form')
const divElement = document.querySelector('#div')
const pElement = document.querySelector('#p')
const clickHandler1 = function (event) {
console.log('form이 클릭되었습니다.')
}
const clickHandler2 = function (event) {
console.log('div가 클릭되었습니다.')
}
const clickHandler3 = function (event) {
console.log('p가 클릭되었습니다.')
}
formElement.addEventListener('click', clickHandler1)
divElement.addEventListener('click', clickHandler2)
pElement.addEventListener('click', clickHandler3)
다음과 같이 가장 안쪽에 있는 p만 클릭했을 때도
상위 요소들도 같이 동작하는 것을 확인할 수 있다.
이러한 현상을 버블링이라고 한다.
# 버블링
한 요소에 이벤트가 발생하면, 이 요소에 할당된 핸들러가 동작하고 부모 요소의 핸들러가 동작하는 현상
가장 최상단의 조상 요소를 만날 때까지 이 과정이 반복되면서 요소 각각에 할당된 핸들러가 동작함
이벤트가 정확히 어디서 발생하는지 알 수 있는 방법?
const outerOuterElement = document.querySelector('#outerouter')
const clickHandler = function (event) {
console.log('currentTarget:', event.currentTarget.id)
console.log('target:', event.target.id)
}
outerOuterElement.addEventListener('click', clickHandler)
즉, currentTarget은 핸들러가 부착된 위치, Target은 누른 위치
target
- 이벤트가 발생한 가장 안쪽의 요소
- 실제 이벤트가 시작된 target 요소
- 버블링이 진행되어도 변하지 않음
currentTarget
- 현재 요소
- 항상 이벤트 핸들러가 연결된 요소만을 참조하는 속성
- this와 같다
- 확인하기 쉽지않음, 이벤트때만 잠깐 나오는거라 console.log로 찍어서 확인해야 함
여러가지 event handler 활동예시들
(추가하기)
'FrontEnd > JavaScript' 카테고리의 다른 글
[JS] Axios (0) | 2023.10.30 |
---|---|
[JS] 동기와 비동기 (0) | 2023.10.30 |
[JS] 얕은 복사와 깊은 복사 (0) | 2023.10.26 |
[JS] 'this' keyword (0) | 2023.10.25 |
[JS] 스코프 (1) | 2023.10.25 |