๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Study/JavaScript

[๋ชจ๋˜์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ]06 ์ด๋ฒคํŠธ์™€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ

06-1. ์ด๋ฒคํŠธ ์•Œ์•„๋ณด๊ธฐ

์ด๋ฒคํŠธ๋ž€

  • ์ด๋ฒคํŠธ: ์›น ๋ธŒ๋ผ์šฐ์ €๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ์–ด๋–ค ๋™์ž‘
  • ex) ์›น ๋ฌธ์„œ์—์„œ ํ‚ค๋ณด๋“œ์˜ ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋Š” ๊ฒƒ, ์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์— ์›น ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ
  • ์ด๋ฒคํŠธ๋Š” ์›น ๋ฌธ์„œ ์˜์—ญ์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ๋™์ž‘๋งŒ ๋งํ•จ(ex. ์›น ํŽ˜์ด์ง€ ์ฝ์–ด ์˜ค๊ธฐ, ๋งํฌ ํด๋ฆญํ•˜๊ธฐ)
    (์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ๋งจ ์œ„ ์ œ๋ชฉ ํ‘œ์‹œ์ค„์„ ํด๋ฆญํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฒคํŠธ๊ฐ€ ์•„๋‹˜(์˜์—ญ ๋ฒ—์–ด๋‚ฌ์œผ๋ฏ€๋กœ))

 

๋ฌธ์„œ ๋กœ๋”ฉ ์ด๋ฒคํŠธ

  • ์„œ๋ฒ„์—์„œ ์›น ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์œ„์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜๋Š” ๋“ฑ ์›น ๋ฌธ์„œ๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์— ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ
์ด๋ฒคํŠธ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ˆœ๊ฐ„
abort ์›น ๋ฌธ์„œ๊ฐ€ ์™„์ „ํžˆ ๋กœ๋”ฉ๋˜๊ธฐ ์ „์— ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋ฅผ ๋ฉˆ์ถ”์—ˆ์„ ๋•Œ
error ๋ฌธ์„œ๊ฐ€ ์ •ํ™•ํžˆ ๋กœ๋”ฉ๋˜์ง€ ์•Š์•˜์„ ๋•Œ
load ๋ฌธ์„œ๊ฐ€ ๋กœ๋”ฉ์ด ๋๋‚ฌ์„ ๋•Œ
resize ๋ฌธ์„œ ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ
scroll ๋ฌธ์„œ ํ™”๋ฉด์ด ์Šคํฌ๋กค๋˜์—ˆ์„ ๋•Œ
unload ๋ฌธ์„œ๋ฅผ ๋ฒ—์–ด๋‚  ๋•Œ
// ex) ๋ฌธ์„œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์ž๋งˆ์ž ์•Œ๋ฆผ์ฐฝ ํ‘œ์‹œ
window.onload = alert("์•ˆ๋…•ํ•˜์„ธ์š”?");

 

๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ

  • ๋งˆ์šฐ์Šค์—์„œ ๋ฒ„ํŠผ์ด๋‚˜ ํœ  ๋ฒ„ํŠผ์„ ์กฐ์ž‘ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
์ด๋ฒคํŠธ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ˆœ๊ฐ„
click ์‚ฌ์šฉ์ž๊ฐ€ HTML ์š”์†Œ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ
dbclick ์‚ฌ์šฉ์ž๊ฐ€ HTML ์š”์†Œ๋ฅผ ๋”๋ธ”ํด๋ฆญํ–ˆ์„ ๋•Œ
mousedown ์‚ฌ์šฉ์ž๊ฐ€ ์š”์†Œ์—์„œ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ
mousemove ์‚ฌ์šฉ์ž๊ฐ€ ์š”์†Œ์—์„œ ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๋ฅผ ์›€์ง์ผ ๋•Œ
mouseover ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๋ฅผ ์š”์†Œ ์œ„๋กœ ์˜ฎ๊ธธ ๋•Œ
mouseout ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ์š”์†Œ๋ฅผ ๋ฒ—์–ด๋‚  ๋•Œ
mouseup ์š”์†Œ ์œ„์— ์˜ฌ๋ ค๋†“์€ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์—์„œ ์†์„ ๋—„ ๋•Œ
// ex) ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ฌธ์„œ์˜ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ฐ”๊พธ๊ธฐ
count bttn = document.querySelector("button");

button.onclick = function(){
	document.body.style.backgroundColor = "green";
}

 

ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ

  • ํ‚ค๋ณด๋“œ์—์„œ ํŠน์ • ํ‚ค๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
์ด๋ฒคํŠธ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ˆœ๊ฐ„
keydown ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋Š” ๋™์•ˆ
keypress ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ
keyup ํ‚ค์—์„œ ์†์„ ๋—„ ๋•Œ
// ex) ํ‚ค๋ณด๋“œ์—์„œ ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์–ด๋–ค ํ‚ค์ธ์ง€ ์•Œ์•„๋‚ด๊ธฐ
const body = document.body;
const result = document.querySelector("#result");

body.addEventListener("keydown", (e) => {
	result.innerText = `
    code: ${e.code},
    key: ${e.key}
    `;
}};

 

ํผ ์ด๋ฒคํŠธ

  • ํผ ์š”์†Œ์— ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ
  • ํผ: ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ(์ •๋ณด)๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ (ex. ๋กœ๊ทธ์ธ, ๊ฒ€์ƒ‰, ๊ฒŒ์‹œํŒ, ์„ค๋ฌธ ์กฐ์‚ฌ)
์ด๋ฒคํŠธ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ˆœ๊ฐ„
blur ํผ ์š”์†Œ๊ฐ€ ํฌ์ปค์Šค๋ฅผ ์žƒ์—ˆ์„ ๋•Œ
change ๋ชฉ๋ก์ด๋‚˜ ์ฒดํฌ ์ƒํƒœ ๋“ฑ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ
(<input>, <select>, <textarea> ํƒœ๊ทธ์—์„œ ์‚ฌ์šฉ)
focus ํผ ์š”์†Œ์— ํฌ์ปค์Šค๋ฅผ ๋†“์•˜์„ ๋•Œ
(<label>, <select>, <textarea>, <button> ํƒœ๊ทธ์—์„œ ์‚ฌ์šฉ)
reset ํผ์ด ๋ฆฌ์…‹๋˜์—ˆ์„ ๋•Œ
submit [submit] ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ
// ex) ์„ ํƒ ๋ชฉ๋ก์—์„œ ์˜ต์…˜์„ ์„ ํƒํ•˜๋ฉด change ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  change ์ด๋ฒคํŠธ์— displaySelecter() ํ•จ์ˆ˜ ์—ฐ๊ฒฐ
const SelectMenu = document.querySelector("#major);

function displaySelect(){
	let selectedText = selectMenu.options[selectMenu.selectedIndex].innerText;
    alert(`[${selectedText}]๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.`);
}

selectMenu.onchange = displaySelect;

 

06-2. ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๊ธฐ

์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ(๋˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ): ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ (์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ์— ๋”ฐ๋ฅธ ์—ฐ๊ฒฐ ๋™์ž‘์ด ์žˆ์–ด์•ผ ํ•จ)

 

MTHL ํƒœ๊ทธ์— ํ•จ์ˆ˜ ์—ฐ๊ฒฐํ•˜๊ธฐ

  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ• → ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ HTML ํƒœ๊ทธ์— ์ง์ ‘ ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ
  • HTML ํƒœ๊ทธ์— ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์†์„ฑ ์ถ”๊ฐ€ (์†์„ฑ ์ด๋ฆ„: 'on์ด๋ฒคํŠธ๋ช…'), ๊ทธ ๋’ค์— ํ•จ์ˆ˜ ์—ฐ๊ฒฐ
<ํƒœ๊ทธ on์ด๋ฒคํŠธ๋ช… = "ํ•จ์ˆ˜๋ช…">

// .html
// ex) ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์•Œ๋ฆผ ์ฐฝ์„ ํ‘œ์‹œ
<button onclick = "alert('ํด๋ฆญ!')">Click</button>
  • ์œ„ ๋ฐฉ๋ฒ•์€ HTML ํƒœ๊ทธ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค์—์„œ ํ•จ์ˆ˜ ์ด๋ฆ„์ด ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด ์žˆ์„ ๊ฒฝ์šฐ HTML ์†Œ์Šค๋„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด์•ผ ํ•จ
  • ์ฆ‰, HTML ์†Œ์Šค์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์Šคํฌ๋ฆฝํŠธ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด HTML ์†Œ์Šค๋ฅผ ๋‹ค ๋’ค์ ธ์•ผ ํ•จ

 

์›น ์š”์†Œ์— ํ•จ์ˆ˜ ์—ฐ๊ฒฐํ•˜๊ธฐ

  • ์Šคํฌ๋ฆฌํŠธ ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ HTML ๋งˆํฌ์—…์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋ฉด ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋„ ์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ → DOM์„ ์‚ฌ์šฉํ•ด ์›น ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ ํ”„๋กœํผํ‹ฐ๋กœ ํ•จ์ˆ˜ ์—ฐ๊ฒฐํ•˜๊ธฐ
์š”์†Œ.on์ด๋ฒคํŠธ๋ช… = ํ•จ์ˆ˜

// ex) ๋ฒ„ํŠผ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ฌธ์„œ์˜ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ฐ”๊พธ๊ธฐ
const button = document.querySelector("button");

button.onclick = function(){
	document.body.style.background = "green";
}

// ex) ํ•จ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค๊ธฐ
function changeBackground(){
	document.body.style.backgroundColor = "green";
}
const button = document.querySelector("button");
button.onclick = chageBackground;	// ์‹คํ–‰ํ•  ํ•จ์ˆ˜ ์ด๋ฆ„ ๋’ค์— ์†Œ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
๋”๋ณด๊ธฐ

๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ฐฐ๊ฒฝ์ƒ‰๊ณผ ๊ธ€์ž์ƒ‰ ๋ฐ”๊พธ๊ธฐ

// .html
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>๋ฒ„ํŠผ ํด๋ฆญ</title>
  <link rel="stylesheet" href="css/main.css">
</head>
<body>
  <p>๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋ฐฐ๊ฒฝ์ƒ‰๊ณผ ๊ธ€์ž์ƒ‰์ด ๋ฐ”๋€๋‹ˆ๋‹ค.</p>
  <button>Click</button>
  <script src="js/ex-1.js"></script>
</body>
</html>

 

function changeBgText(){
  document.body.style.backgroundColor = "#222";
  document.body.style.color = "#fff";
}
const button = document.querySelector("button");
button.onclick = changeBgText;

 

 

  • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‘ ๊ฐ€์ง€ ์ด์ƒ์˜ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ๋ฌธ์ œ ๋ฐœ์ƒ
    → 'on์ด๋ฒคํŠธ๋ช…' ํ”„๋กœํผํ‹ฐ๋ฅผ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ(๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์‚ฌ์šฉํ•œ onclick ํ”„๋กœํผํ‹ฐ๋งŒ ์ ์šฉ)
  • ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด addEventListener()๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

 

์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋กœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๊ธฐ

  • ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋Š” ๋ชจ๋“  DOM์š”์†Œ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋“  ํ•จ์ˆ˜์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ
  • ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•ด ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•  ๋•Œ → addEventListener() ๋ฉ”์„œ๋“œ(ํ•จ์ˆ˜)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
์š”์†Œ.addEventListener(์ด๋ฒคํŠธ, ํ•จ์ˆ˜, ์บก์ฒ˜ ์—ฌ๋ถ€);
  • ์š”์†Œ: ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ
  • ์ด๋ฒคํŠธ: ์ด๋ฒคํŠธ ์œ ํ˜•. ๋‹จ, ์—ฌ๊ธฐ์—์„œ๋Š” ์ด๋ฒคํŠธ ์ด๋ฆ„ ์•ž์— on์„ ๋ถ™์ด์ง€ ์•Š๊ณ  click์ด๋‚˜ keypress์ฒ˜๋Ÿผ ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•จ
  • ํ•จ์ˆ˜: ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ์ง€์ •. ๊ธฐ์กด์— ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜๊ณ  ์ง์ ‘ ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด๋„ ๋จ. ์ต๋ช… ํ•จ์ˆ˜๋กœ ์‹คํ–‰ํ•  ๋•Œ๋Š” event ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค์–‘ํ•œ ๊ฒƒ๋“ค์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
  • ์บก์ฒ˜ ์—ฌ๋ถ€: ์ด๋ฒคํŠธ๋ฅผ ์บก์ฒ˜๋งํ•˜๋Š”์ง€์˜ ์—ฌ๋ถ€๋ฅผ ์ง€์ • (์ฆ‰, true๋ฉด ์บก์ฒ˜๋ง, false๋ฉด ๋ฒ„๋ธ”๋ง ํ•œ๋‹ค๋Š” ์˜๋ฏธ. ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ false)

 

์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์„œ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ฐ”๊พธ๊ธฐ

// ์ด๋ฏธ ๋งŒ๋“  ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐ
function changeBackground(){
	document.body.style.backgroundColor = "green";
}

button.addEventListener("clcik", changeBackground);

// ์ต๋ช… ํ•จ์ˆ˜ ์‚ฌ์šฉ
button.addEventListener("click", function(){
	document.body.style.backgroundColor = "green";
});

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ
button.addEventListener("click", () => {
	document.body.style.backgroundColor = "green";
});
๋”๋ณด๊ธฐ

addEventListener() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ฌธ์„œ์˜ ๋ฐฐ๊ฒฝ์ƒ‰๊ณผ ๊ธ€์ž์ƒ‰์„ ํ† ๊ธ€ํ•˜๋Š” ์†Œ์Šค ์ž‘์„ฑ

// .html
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>๋ฒ„ํŠผ ํด๋ฆญ</title>
  <link rel="stylesheet" href="css/main.css">
  <style>
    .convert {
      background-color:#222;
      color:#fff;
    }
  </style>
</head>
<body>
  <p>๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋ฐฐ๊ฒฝ์ƒ‰๊ณผ ๊ธ€์ž์ƒ‰์ด ๋ฐ”๋€๋‹ˆ๋‹ค.</p>
  <button>Click</button>
  <script src="js/ex-2.js"></script>
</body>
</html>

 

/*const button = document.querySelector("button");

// ๋ฏธ๋ฆฌ .convert ์Šคํƒ€์ผ ๋งŒ๋“ค์–ด ๋†“๊ณ  ํ† ๊ธ€ํ•˜๊ธฐ
button.addEventListener("click", function() {
  document.body.classList.toggle("convert");
});*/

const button = document.querySelector("button");

button.addEventListener("click", () =>{
  document.body.classList.toggle("convert");
});

 

 

 ํ…์ŠคํŠธ ํ•„๋“œ์— ์ž…๋ ฅํ•œ ๊ธ€์ž ์ˆ˜ ์•Œ์•„๋‚ด๊ธฐ

// ex) ํ…์ŠคํŠธ ํ•„๋“œ์— ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๋‹จ์–ด์˜ ๊ธธ์ด์ธ ๊ธ€์ž ์ˆ˜๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ
const button = document.querySelector("#bttn");

button.addEventListener("click", () => {
	const word = document.querySelector("#word").value;	// ํ…์ŠคํŠธ ํ•„๋“œ์˜ ๋‚ด์šฉ
    const result = document.querySelector("#rsult");	// ๊ฒฐ๊ด๊ฐ’์„ ํ‘œ์‹œํ•  ์˜์—ญ
    let const = word.length;	// ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
	
    result.innerText = `${count}`;	// ๊ฒฐ๊ด๊ฐ’ ํ‘œ์‹œ
});
  • ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” length ํ”„๋กœํผํ‹ฐ์— ๋“ค์–ด์žˆ์Œ

 

 

06-3. event ๊ฐ์ฒด

  • DOM์—๋Š” ์›น ๋ฌธ์„œ์— ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” event ๊ฐ์ฒด๊ฐ€ ์žˆ์Œ
  • event ๊ฐ์ฒด์—๋Š” ์ •๋ณด(์–ด๋–ค ์š”์†Œ์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€, ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๋“ฑ)๊ฐ€ ํฌํ•จ๋จ

 

event ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ

  • ์›น ๋ฌธ์„œ์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ด๋ฒคํŠธ์™€ ๊ด€๋ จ๋œ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง
  • event ๊ฐ์ฒด์—๋Š” ์ด๋ฒคํŠธ ๊ด€๋ จ ๋‹ค์–‘ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ(์ด๋ฒคํŠธ ์ด๋ฆ„, ๋ฐœ์ƒ ์œ„์น˜, ๋ฐœ์ƒ ์‹œ๊ฐ„ ๋“ฑ)
  • event ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋Š” preventDefault() ๋ฟ
ํ”„๋กœํผํ‹ฐ ๊ธฐ๋Šฅ
altKey ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ [Alt]๋ฅผ ๋ˆ„๋ฅด๊ณ  ์žˆ์—ˆ๋Š”์ง€์˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ถˆ๋ฆฌ์–ธ๊ฐ’์„ ๋ฐ˜ํ™˜
button ๋งˆ์šฐ์Šค ํ‚ค๊ฐ’์„ ๋ฐ˜ํ™˜
charCode keypress ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ด๋–ค ํ‚ค๊ฐ€ ๋ˆŒ๋ ธ๋Š”์ง€ ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜
clietX ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฐ€๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜
clientY ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์„ธ๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜
ctrlKey ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ [Ctrl]์„ ๋ˆ„๋ฅด๊ณ  ์žˆ์—ˆ๋Š”์ง€์˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ถˆ๋ฆฌ์–ธ๊ฐ’์„ ๋ฐ˜ํ™˜
pageX ํ˜„์žฌ ๋ฌธ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฐ€๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜
pageY ํ˜„์žฌ ๋ฌธ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์„ธ๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜
screenX ํ˜„์žฌ ํ™”๋ฉด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฐ€๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜
screenY ํ˜„์žฌ ํ™”๋ฉด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์„ธ๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜
shiftKey ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ [Shift]์„ ๋ˆ„๋ฅด๊ณ  ์žˆ์—ˆ๋Š”์ง€์˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ถˆ๋ฆฌ์–ธ๊ฐ’์„ ๋ฐ˜ํ™˜
target ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๋Œ€์ƒ์„ ๋ฐ˜ํ™˜
timeStamp ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์‹œ๊ฐ„์„ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ ๋ฐ˜ํ™˜
type ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜
which ํ‚ค๋ณด๋“œ์™€ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ‚ค์˜ ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ’์„ ๋ฐ˜ํ™˜

 

๋ฉ”์„œ๋“œ ๊ธฐ๋Šฅ
preventDefault (์ทจ์†Œํ•  ์ˆ˜ ์žˆ์„ ๊ฒฝ์šฐ) ๊ธฐ๋ณธ ๋™์ž‘์„ ์ทจ์†Œ

โ€ป event ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ ์ „์ฒด ๋ชฉ๋ก ํ™•์ธ
→ 'developer.mozilla.org/ko/docs/Web/API/Event' ์ฐธ๊ณ 

 

๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ์—์„œ ํด๋ฆญ ์œ„์น˜ ์•Œ์•„๋‚ด๊ธฐ

  • ๋งˆ์šฐ์Šค์—์„œ click ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ event ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ฆญ ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ
const box = document.querySelector("#box");

box.addEventListener("click", (e) => {
	alert(`์ด๋ฒคํŠธ ๋ฐœ์ƒ ์œ„์น˜: ${e.pageX}, ${e.pageY}`);
});

 

ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ์—์„œ ํ‚ค๊ฐ’ ์•Œ์•„๋‚ด๊ธฐ

  • ํ‚ค๋ณด๋“œ์™€ ๊ด€๋ จ๋œ ํ‚ค๊ฐ’์€ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜์ง€๋งŒ, event.code์™€ event.key๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•จ
    (์ด์ „์—๋Š” event.keyCode๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ด ํ”„๋กœํผํ‹ฐ๋Š” ์ด์ œ ํ๊ธฐ๋˜์–ด event.code๋กœ ๋ฐ”๋€œ)
// ex) ํ‚ค๋ณด๋“œ์—์„œ ํ‚ค๋ฅผ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ์–ด๋–ค ํ‚ค๋ฅผ ๋ˆŒ๋ €๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ์˜ˆ์ œ
const body = document.body;
const result = document.querySelector("result");

body.addEventListener("keydown", (e) => {
	result.innerText = `
    code: ${e.code},
    key: ${e.key}
    `;
});
๋”๋ณด๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์บ๋Ÿฌ์…€ ๋งŒ๋“ค๊ธฐ

์บ๋Ÿฌ์…€: ์ด๋ฏธ์ง€๋‚˜ ์ฝ˜ํ…์ธ ๋ฅผ ์Šฌ๋ผ์ด๋“œ ์‡ผ์ฒ˜๋Ÿผ ๋ณด์—ฌ ์ฃผ๋Š” ์š”์†Œ

// .html
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>์บ๋Ÿฌ์…€ ๋งŒ๋“ค๊ธฐ</title>
  <link rel="stylesheet" href="css/carousel.css">
</head>
<body>
  <p>์ขŒ์šฐ ํ™”์‚ดํ‘œ๋ฅผ ๋ˆŒ๋Ÿฌ ๋ณด์„ธ์š”</p>

  <div id="container">
    <div class="arrow" id="left">&lang;</div>
    <div class="arrow" id="right">&rang;</div>
  </div>

  <script src="js/carousel.js"></script>
</body>
</html>

 

// .css
* {
  margin:0;
  padding:0;
  box-sizing: border-box;
}

body {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

p {
  margin:20px;
  font-size:2em;  
}

#container{
  position:relative;
  width:600px;
  height:300px;
  border:2px solid #ccc;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.arrow {
  z-index:100;
  font-size:2em;
  padding:10px;
  background:#ddd;
  color:#222;
  opacity:0.2;
}

.arrow:hover {
  opacity:1;
}

 

const container = document.querySelector("#container"); // ์บ๋Ÿฌ์…€ ์˜์—ญ

// ์ด๋ฏธ์ง€ ๋ฐฐ์—ด
const pics = ["pic-1.jpg", "pic-2.jpg", "pic-3.jpg", "pic-4.jpg", "pic-5.jpg"];

// ์ฒซ ๋ฒˆ์งธ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ‘œ์‹œ
container.style.backgroundImage = `url(images/${pics[0]})`;

const arrows = document.querySelectorAll(".arrow");  // ํ™”์‚ดํ‘œ
let i = 0;  // ๋ฐฐ์—ด ์ธ๋ฑ์Šค

arrows.forEach( arrow => {
    arrow.addEventListener("click", (e) => {
        if(e.target.id == "left"){      // ์™ผ์ชฝ ํ™”์‚ดํ‘œ๋ฅผ ํด๋ฆญํ•œ ๊ฒฝ์šฐ
            i--;                        // ์ด์ „ ์ด๋ฏธ์ง€๋กœ ์ด๋™
            if(i < 0){                  // ์ฒซ ๋ฒˆ์งธ ์ด๋ฏธ์ง€์ธ ๊ฒฝ์šฐ
                i = pics.length - 1;    // ๋งˆ์ง€๋ง‰ ์ด๋ฏธ์ง€๋กœ ์ด๋™
            }
        }
        else if(e.target.id == "right"){    // ์˜ค๋ฅธ์ชฝ ํ™”์‚ดํ‘œ๋ฅผ ํด๋ฆญํ•œ ๊ฒฝ์šฐ
            i++;                            // ๋‹ค์Œ ์ด๋ฏธ์ง€๋กœ ์ด๋™
            if(i >= pics.length){           // ๋งˆ์ง€๋ง‰ ์ด๋ฏธ์ง€์ธ ๊ฒฝ์šฐ
                i = 0;                      // ์ฒซ ๋ฒˆ์งธ ์ด๋ฏธ์ง€๋กœ ์ด๋™
            }
        }
        container.style.backgroundImage = `url(images/${pics[i]})`; // ํ˜„์žฌ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œ
    });
});

// ์›น ๋ฌธ์„œ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ๋น„ํ™œ์„ฑํ™”์‹œํ‚ค๊ธฐ
window.addEventListener("contextmenu", e => {
    e.preventDefault();
    alert("์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.")
});

 

 

 

06-4. ์ด๋ฒคํŠธ ์ „ํŒŒ

  • ์ด๋ฒคํŠธ ์ „ํŒŒ: ์›น ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๋‹น ์š”์†Œ์—๋งŒ ์ด๋ฒคํŠธ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ์š”์†Œ๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ๋ถ€๋ชจ ์š”์†Œ, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์š”์†Œ์˜ ๋ถ€๋ชจ ์š”์†Œ์—์„œ๋„ ๋˜‘๊ฐ™์ด ์ด๋ฒคํŠธ๊ฐ€ ์ฒ˜๋ฆฌ๋จ
  • ์ด๋ฒคํŠธ ์ „ํŒŒ๋Š” '๋ฒ„๋ธ”๋ง'๊ณผ '์บก์ฒ˜๋ง' ํ˜•ํƒœ๋กœ ๋‚˜๋‰จ

 

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง

  • ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง: ํŠน์ • ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ทธ ์ด๋ฒคํŠธ๊ฐ€ ํ•ด๋‹น ์š”์†Œ๋ฟ๋งŒ ์•„๋‹ˆใ…ใ„น ๊ทธ ์š”์†Œ์˜ ๋ถ€๋ชจ ์š”์†Œ, ๋ถ€๋ชจ ์š”์†Œ์˜ ๋ถ€๋ชจ ์š”์†Œ์—๋„ ๋˜‘๊ฐ™์ด ๋ฐœ์ƒํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ
// .html
// ์ƒ๋žต
<body>
  BODY
  <div onclick = "console.log('div')">
    DIV
    <section onclick = "console.log('section')">
      SECTION
      <p onclick = "console.log('p')">P</p>
    </section>
  </div>
</body>
// ์ƒ๋žต

  • ๊ฐ€์žฅ ์•ˆ์ชฝ์˜ 'P'๋ฅผ ํด๋ฆญํ•˜๋ฉด 'SECTION'๊ณผ 'DIV'๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋‚˜ํƒ€๋‚˜๋Š” ๋‚ด์šฉ๋„ ํ•จ๊ป˜ ํ‘œ์‹œ๋จ
  • → P ์š”์†Œ์—์„œ ๋ฐœ์ƒํ•œ click ์ด๋ฒคํŠธ๊ฐ€ section ์š”์†Œ๋ฅผ ๊ฑฐ์ฒ˜ div ์š”์†Œ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ ํ•ด๋‹น ์š”์†Œ๋“ค์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ํ•จ๊ป˜ ์‹คํ–‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ

 

event.target๊ณผ event.currentTarget

  • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์ด๋ฒคํŠธ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋Š” event ๊ฐ์ฒด์— ๋‹ด๊ฒจ์ง
  • event ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ์ค‘์—์„œ ์ด๋ฒคํŠธ ์ „ํŒŒ์™€ ๊ด€๋ จ์ด ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ๋Š” target ํ”„๋กœํผํ‹ฐ์™€ currentTarget ํ”„๋กœํผํ‹ฐ์ž„
// .html
// ์ƒ๋žต
<body>
  BODY
  <div>
    DIV
    <section>
      SECTION
      <p>P</p>
    </section>
  </div>

  <script src="js/propagation.js"></script>
</body>
// ์ƒ๋žต

// .js
const elements = document.querySelectorAll('*');  // ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์™€ elements์— ์ €์žฅ

 // ๋ชจ๋“  ์š”์†Œ ์ˆœํšŒํ•˜๋ฉด์„œ click ์ด๋ฒคํŠธ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ 
 // event.target๊ณผ event.currentTarget์˜ ํƒœ๊ทธ๋ช… ํ‘œ์‹œ
for (let element of elements) {
  element.addEventListener("click", e => 
    console.log(`event.target : ${e.target.tagName}, event.currentTarget : ${e.currentTarget.tagName}`)
  );
}

// ์•„๋ž˜์™€ ๊ฐ™์ด for๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
// for (let i = 0 ; i < elements.length ; i++) { 
//   elements[i].addEventListener("click", function(e) {   
//     console.log(e.target.tagName);                      
//   });
// }

  • P ์˜์—ญ์„ ํด๋ฆญํ•˜๋ฉด P ์˜์—ญ๋ถ€ํ„ฐ ์ตœ์ƒ์œ„ ์š”์†Œ๊นŒ์ง€ ์ด๋ฒคํŠธ๊ฐ€ ์ „ํŒŒ๋จ
  • event.target : ์ฒ˜์Œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๋Œ€์ƒ
  • event.currentTarget : ์ด๋ฒคํŠธ๊ฐ€ ์ „ํŒŒ๋˜๋ฉด์„œ ํ˜„์žฌ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋Œ€์ƒ

 

์ด๋ฒคํŠธ ์บก์ณ๋ง

  • (์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ '์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง' ์ „ํŒŒ ๋ฐฉ์‹์„ ์‚ฌ์šฉ..)
  • ์ด๋ฒคํŠธ ์บก์ณ๋ง: ์›น ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ผ๋‹จ ์ตœ์ƒ์œ„ ์š”์†Œ์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ์ด๋ฒคํŠธ๊ฐ€ ์ „ํŒŒ๋˜๋Š” ๋ฐฉ์‹
  • ๋ฒ„๋ธ”๋ง → ์•„๋ž˜์„œ ์œ„(์ž์‹ ์š”์†Œ์—์„œ ๋ถ€๋ชจ ์š”์†Œ) ์ „ํŒŒ
    ์บก์ณ๋ง → ์œ„์—์„œ ์•„๋ž˜(๋ถ€๋ชจ ์š”์†Œ์—์„œ ์ž์‹ ์š”์†Œ) ์ „ํŒŒ
// .html
// ์ƒ๋žต
<body>
  BODY
  <div>
    DIV
    <section>
      SECTION
      <p>P</p>
    </section>
  </div>

  <script src="js/capturing.js"></script>
</body>
// ์ƒ๋žต
const elements = document.querySelectorAll('*');  // ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์™€ elements์— ์ €์žฅ

 // ๋ชจ๋“  ์š”์†Œ ์ˆœํšŒํ•˜๋ฉด์„œ click ์ด๋ฒคํŠธ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ 
 // event.target๊ณผ event.currentTarget์˜ ํƒœ๊ทธ๋ช… ํ‘œ์‹œ
for (let element of elements) {
  element.addEventListener("click", e => 
    console.log(`event.target : ${e.target.tagName}, event.currentTarget : ${e.currentTarget.tagName}`),
  true);
}

// ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ for ... of ๋ฌธ ์‚ฌ์šฉ์„ ์ถ”์ฒœ
// for (let i = 0 ; i < elements.length ; i++) { 
//   elements[i].addEventListener("click", function(e) {   
//     console.log(e.target.tagName);                      
//   }, true);
// }
// .js

  • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์˜์—ญ์€ P ์˜์—ญ์ด์ง€๋งŒ, currentTarget์ด ์ตœ์ƒ์œ„ ์š”์†Œ์ธ HTML ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•จ

 

 

 

 

๊ต์žฌ: Do it! ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ •์„