JiwonDev

HTML ์ด๋ฒคํŠธ ์—ฐ๊ฒฐ(onclick, addEventListener ์ฐจ์ด)

by JiwonDev

HTML์—์„œ ์ง์ ‘ ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

HTML์—์„œ๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , onevent(ex. onclick, onfocus ๋“ฑ)์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ

HTML-DOM์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜๊ฒŒ ํ•œ๋‹ค.

๋˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ง์ ‘ HTML ์†์„ฑ์— ์ง์ ‘ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

(์—ฌ๋Ÿฌ ๊ตฌ๋ฌธ์ผ ๊ฒฝ์šฐ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.)

<input type="button" value="Press Me" onclick="alert('thanks');">   
 
<form action="processform.action" onsubmit="return validateForm();">
 
<body onload="startApp()"> 

JavaScript ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ event-driven programming ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

์‰ฝ๊ฒŒ๋งํ•ด ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑํ•œ ์ด๋ฒคํŠธ ๊ด€๋ฆฌ ๋ฉ”์„œ๋“œ(event handler)๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

let btn = document.getElementById('btn');

btn.addEventListener('click', function() {
  alert('addEventListener-1');
});

 

๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ๋‚ด์—์„œ event handler๋ฅผ DOM์˜ ์†์„ฑ์œผ๋กœ ํ• ๋‹น๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋Š” HTML ์ฝ”๋“œ ์•ˆ์— ์†์„ฑ๊ฐ’์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋™์ผํ•˜๋‹ค.

ํ•ด๋‹น DOM ์š”์†Œ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ํ”„๋กœํผํ‹ฐ(element.value = x) ํ˜•ํƒœ๋กœ ํ• ๋‹นํ•˜๋ฉด ๋œ๋‹ค.

document.getElementById('button1').onclick = function(){alert('thanks');};
 
function startApp(){...} 
document.onload = startApp;

๊ทธ๋Ÿผ ์ด ๋‘˜์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ?

ใ…‡var btn = document.getElementById('btn');

btn.onclick = function() {
  alert('onclick-1'); // ๋’ค์— onclick-2์— ๋ฎ์–ด์”Œ์›Œ์ ธ์„œ ์‹คํ–‰๋˜์ง€์•Š์Œ.
}

btn.onclick = function() {
  alert('onclick-2'); // ์‹คํ–‰
}

btn.addEventListener('click', function() {
  alert('addEventListener-1'); // ์‹คํ–‰
});

btn.addEventListener('click', function() {
  alert('addEventListener-2'); // ์‹คํ–‰
});

ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ (addEventListener)๋กœ ์—ฐ๊ฒฐํ•œ ๊ฒฝ์šฐ ๋ชจ๋“  ์ด๋ฒคํŠธ๊ฐ€ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋“ฑ๋ก ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, HTML ์†์„ฑ์„ ๋“ฑ๋ก(.onclick)ํ•˜๋Š” ๊ฒฝ์šฐ 1๊ฐ€์ง€ ์†์„ฑ(์ด๋ฒคํŠธ)๋ฐ–์— ๊ฐ€์ง€์ง€ ๋ชปํ•˜๊ธฐ์— ๋ฎ์–ด์”Œ์›Œ์ง€๊ฒŒ๋œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค! ๊ทธ๋ƒฅ addEventListener๋กœ ๋“ฑ๋กํ•˜๋Š”๊ฒƒ์ด ๋งž๋‹ค. .onclick ์“ฐ์ง€๋งˆ๋ผ.


๊ทธ๋Ÿผ onclick์€ ์™œ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ์š”?

์›น์€ ์• ์ดˆ์— 1991๋…„ ์œ ๋Ÿฝ์ž…์ž๋ฌผ๋ฆฌํ•™์—ฐ๊ตฌ์†Œ(CERN)์—์„œ ํŒ€๋ฒ„๋„ˆ์Šค๋ฆฌ๊ฐ€ ๋„์„œ๊ด€์ฒ˜๋Ÿผ ์ž๋ฃŒ๋ฅผ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค. ๊ทธ๋ž˜์„œ ์ดˆ์ฐฝ๊ธฐ์—๋Š” ๊ทธ๋ƒฅ ํ…์ŠคํŠธ๋งŒ ๋ฐ•์•„๋…ผ HTML ๋ฐ–์— ์—†์—ˆ๋‹ค.

์ด๊ฒŒ 2000๋…„๋Œ€์˜ ๋ฉ”์ธ ์›น์‚ฌ์ดํŠธ. ์ด๊ฒŒ ์ž˜๋งŒ๋“ ๊ฑฐ์˜€๋‹ค.

์ดํ›„ HTML ์ฝ”๋“œ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๊ณ , ๊ฐœํŒ๋˜๋‹ˆ๊นŒ ์Šคํƒ€์ผ์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ (CSS) ์ €์žฅํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ 

์›น ์ƒ์—์„œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค, ๋™์ž‘์„ ๋งŒ๋“ค๊ธฐ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ(Livescript -> JavaScript)๊ฐ€ ๋ฐœ์ „ํ•˜์˜€๊ณ 

๊ฐ๊ฐ์˜ ๋ธŒ๋ผ์šฐ์ € ํšŒ์‚ฌ๋ผ๋ฆฌ ์ง€ ๊ผด๋ฆฌ๋Š” ๋ฌธ๋ฒ•์˜ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด(์ด ๋‹น์‹œ์—๋Š” ๊ฐœ๋ฐœ์–ธ์–ด๋ผ๊ณ  ๋ณด๊ธฐ๋„ ํž˜๋“  ์ˆ˜์ค€)๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€

 

2008๋…„ ๊ตฌ๊ธ€์˜ Chrome์˜ ๋“ฑ์žฅ์œผ๋กœ ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €๋“ค์ด ๊ฒฝ์Ÿ์ƒ๋Œ€๊ฐ€ ๋˜์ง€์•Š์ž ๊ทธ์ œ์„œ์•ผ ์Šคํฌ๋ฆฝํŠธ์–ธ์–ด์˜ ํ‘œ์ค€(ECMA)์„ ๋งŒ๋“ค๊ณ , ๋ธŒ๋ผ์šฐ์ €๋“ค์ด ๊ทธ ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐœ์ „ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.


์ฆ‰, ์š”์•ฝํ•˜๋ฉด

onclick ์€ ์›น ์ดˆ์ฐฝ๊ธฐ๋ถ€ํ„ฐ (DOM Level-0) ์ง€์›ํ•˜๋˜ ๊ธฐ๋Šฅ์ด๊ณ 

์ดํ›„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฐœ์ „ํ•˜๋ฉฐ addEventListener(DOM Level-2)๊ฐ€ ์ƒ๊ฒผ๋‹ค.

์ฆ‰ ๊ตฌ์„๊ธฐ์‹œ๋Œ€ ์›น(IE8 ๋ฒ„์ „ ์ดํ•˜, 2016๋…„๋„์— ์ด๋ฏธ ์ง€์›์ข…๋ฃŒํ•œ ์„œ๋น„์Šค) ์—์„œ๋Š” onclick ๋ฐ–์— ์ง€์›ํ•˜์ง€ ์•Š์•˜๋‹ค.

 

์ด๋ฒคํŠธ ์บก์ณ๋ง, ๋ฒ„๋ธ”๋ง ๊ฐ™์€ ์ด๋ฒคํŠธ ๋ฐฉ์‹์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฒŒ addEventListener (event-driven) ๋ฐฉ์‹์ด๋‹ค.

๊ทธ๋ƒฅ .onclick์„ ์“ฐ์ง€๋ง์ž.

 

'๐Ÿ–ผFront > HTML&CSS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

HTML # 1 ์ž์ฃผ ์“ฐ๋Š” ํƒœ๊ทธ  (0) 2021.03.28
HTML, CSS ๊ธฐ์ดˆ  (0) 2021.03.22

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ