<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script defer src="./event.js"></script>
<title>Document</title>
<style>
.parent {
width: 400px;
height: 200px;
margin: 40px;
padding: 20px;
border: 5px solid;
background-color: red;
overflow: auto;
}
.child {
width: 300px;
height: 100px;
margin-bottom: 20px;
border: 5px solid;
background-color: orange;
font-size: 40px;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">
<a href="http://apple.com" target="_blank">์ฌ๊ณผ</a>
</div>
<div class="child">
<a href="http://google.com" target="_blank">๋ฐ๋๋</a>
</div>
<div class="child">
<a href="http://heropy.dev" target="_blank">์ฒด๋ฆฌ</a>
</div>
</div>
</body>
</html>
๋์.addEventListener(์ด๋ฒคํธ์ข
๋ฅ, ํธ๋ค๋ฌ) : ๋์์์ ์ฒญ์ทจ(Listen)ํ ์ด๋ฒคํธ ์ข
๋ฅ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํธ์ถํ ์ฝ๋ฐฑ(Handler)const parentEl = document.querySelector('.parent')
const childEl = document.querySelector('.child')
parentEl.addEventListener('click', () => {
console.log('Parent!')
})
childEl.addEventListener('click', () => {
console.log('Child!')
})
๋์.removeEventListener(์ด๋ฒคํธ์ข
๋ฅ, ํธ๋ค๋ฌ) : ๋์์ ๋ฑ๋กํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ ๊ฑฐํ๋ค.const parentEl = document.querySelector('.parent')
const childEl = document.querySelector('.child')
const handler = () => {
console.log('Parent!')
}
parentEl.addEventListener('click', handler)
childEl.addEventListener('click', () => {
parentEl.removeEventListener('click', handler)
})
.addEventListener() ํธ๋ค๋ฌ์ ์ฒซ ๋งค๊ฐ๋ณ์๋ก, ๋ฐ์ํ ์ด๋ฒคํธ์ ์ ๋ณด๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ค.const parentEl = document.querySelector('.parent')
parentEl.addEventListener('click', event => {
console.log(parentEl)
console.log(event)
})
const inputEl = document.querySelector('input')
inputEl.addEventListener('keydown', event => {
console.log(event.key)
console.log(inputEl.value)
console.log(event.target.value)
})
: ์ด๋ฒคํธ์ ๊ธฐ๋ณธ ๋์์ ๋ฐฉ์งํ๋ค.
// <a> ํ๊ทธ์์ ํ์ด์ง ์ด๋ ๋ฐฉ์ง!
const anchorEl = document.querySelector('a')
anchorEl.addEventListener('click', event => {
event.preventDefault()
console.log('Click!')
})
// ๋ง์ฐ์ค ํ ์ ์คํฌ๋กค ๋์ ๋ฐฉ์ง!
const parentEl = document.querySelector('.parent')
parentEl.addEventListener('wheel', event => {
event.preventDefault()
})
: ํ์ ์์์์ ์์ ์์๋ก์ ์ด๋ฒคํธ ์ ํ(๋ฒ๋ธ)๋ฅผ ์ ์งํ๋ค.
const parentEl = document.querySelector('.parent')
const childEl = document.querySelector('.child')
const anchorEl = document.querySelector('a')
window.addEventListener('click', () => {
console.log('Window!')
})
document.documentElement.addEventListener('click', () => {
console.log('HTML!')
})
document.body.addEventListener('click', () => {
console.log('Body!')
})
parentEl.addEventListener('click', (event) => {
console.log('Parent!')
event.stopPropagation() //๋ฒ๋ธ๋ง ์ ์ง
})
childEl.addEventListener('click', () => {
console.log('Child!')
})
anchorEl.addEventListener('click', (event) => {
console.log('Anchor!')
event.preventDefault()
})
Anchor!
Child!
Parent!
(์ฌ๊ณผ๋ฅผ ๋๋ฅด๋ฉด)
: ์ด๋ฒคํธ ์บก์ฒ๋ฅผ ํ์ฑํํ๋ค.
: ์บก์ฒ๋ ์์๋ ๋งจ ์๋ก ์ฎ๊ฒจ์ง
const parentEl = document.querySelector('.parent')
const childEl = document.querySelector('.child')
const anchorEl = document.querySelector('a')
window.addEventListener('click', () => {
console.log('Window!')
})
document.documentElement.addEventListener('click', () => {
console.log('HTML!')
})
document.body.addEventListener('click', () => {
console.log('Body!')
}, {
capture: true
})
parentEl.addEventListener('click', () => {
console.log('Parent!')
}, {
capture: true
})
childEl.addEventListener('click', () => {
console.log('Child!')
})
anchorEl.addEventListener('click', (event) => {
console.log('Anchor!')
event.preventDefault()
})
Body!
Parent!
Anchor!
Child!
HTML!
Window!
(์ฌ๊ณผ๋ถ๋ถ์ ๋๋ฅด๋ฉด)
: ๋ธ๋ผ์ฐ์ ์
๋ ฅ๊ธฐ์ CJK ๋ฌธ์ ๊ตฌ์ฑ ์ค์๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ 2๋ฒ ์คํ๋ ์ ์๋ค.
: ํ๊ธ ์
๋ ฅ ์ค์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
const inputEl = document.querySelector('input')
inputEl.addEventListener('keydown', event => {
if (event.isComposing) return
if (event.key === 'Enter') {
const h1El = document.createElement('h1')
h1El.textContent = inputEl.value
document.body.append(h1El)
}
})
const parentEl = document.querySelector('.parent')
const childEls = document.querySelectorAll('.child')
childEls.forEach(childEl => {
// click - ํด๋ฆญํ์ ๋
// dblclick - ๋๋ธ ํด๋ฆญํ์ ๋
childEl.addEventListener('click', () => {
childEl.classList.toggle('active')
})
// contextmenu - ์ฐํด๋ฆญํ์ ๋
childEl.addEventListener('contextmenu', event => {
event.preventDefault()
console.log(childEl.textContent)
})
})