ch2-event

์ด๋ฒคํŠธ๋Š” JS์˜ ๋น„ํ‘œ์ค€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ๋‹ค.

2.1 ์ด๋ฒคํŠธ ์ˆ˜์‹ 

addEventListener()๋Š” ์ด๋ฒคํŠธ์˜ ํ•ต์‹ฌ ํ•จ์ˆ˜๋กœ ์„ธ ๊ฐ€์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜์ธ type(์ด๋ฒคํŠธ ์ข…๋ฅ˜), listener(์ฝœ๋ฐฑ), useCaptuer๋ฅผ ํฌํ•จํ•œ๋‹ค. ์ด ์ค‘ type, listener๋‘ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ DOM ์—˜๋ฆฌ๋จผํŠธ์— ํ•จ์ˆ˜ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

var button = document.getElementById("createButton");
button.addEventListener("click", function(){}, false);

addEventListener()๋ฅผ ํ˜ธ์ถœ์‹œ ๋„˜๊ฒจ์ค€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ

removeEventListener()์— ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ธฐ์กด์— ๋“ฑ๋กํ•œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฆฌ์Šค๋„ˆ ํ•จ์ˆ˜๋ฅผ ์ต๋ช… ํ•จ์ˆ˜๋กœ ์ •์˜ํ•˜๋ฉด์„œ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด

์—˜๋ฆฌ๋จผํŠธ ์ž์ฒด๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ ๋Š” ๋“ฑ๋กํ•œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค.

  • ์ฒซ๋ฒˆ์จฐ ์ธ์ž๋กœ ์ด๋ฒคํŠธ ๊ด€๋ จ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” event ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

e ์˜ค๋ธŒ์ ํŠธ๋Š” event propogation, ๊ธฐ๋ณธ ๋™์ž‘ ์‹คํ–‰ ๋ฐฉ์ง€ ๋“ฑ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜ ์ œ๊ณต.

2.2 ์ด๋ฒคํŠธ ์ˆœ์„œ

ํŠน์ • ํƒ€์ž…์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์—˜๋ฆฌ๋จผํŠธ์™€ ์—˜๋ฆฌ๋จผํŠธ์˜ ๋ถ€๋ชจ๊ฐ€ ๋™์‹œ์— ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•˜์ž.

์ด ๋–„ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ˆ„๊ตฌ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋ ๊นŒ?

๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค.

๋„ท์Šค์ผ€์ดํ”„ 4๋Š” ๊ฐ€์žฅ ์ƒ์œ„ ๋ถ€๋ชจ์—์„œ, ์ฆ‰ ๋ฐ”๊นฅ์ชฝ์—์„œ ์•ˆ์ชฝ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ด๋ฒคํŠธ ์บก์ฒ˜๋ง ์ง€์›

MS๋Š” ์—˜๋ฆฌ๋จผํŠธ์—์„œ ๋ถ€๋ชจ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ „ํŒŒํ•˜๋Š” ์ฆ‰, ์•ˆ์ชฝ์—์„œ ๋ฐ”๊นฅ์ชฝ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง ์ง€์›

ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด ๋Œ€๋ถ€๋ถ„์€ event bubbling์„ ์‚ฌ์šฉํ•œ๋‹ค.

2.3 ์ด๋ฒคํŠธ ์ทจ์†Œ

stopPropogation() ํ•จ์ˆ˜๋กœ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง ์ค‘๋‹จ ๊ฐ€๋Šฅ.

๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฒคํŠธ์— ๊ธฐ๋ณธ ๋™์ž‘์„ ์ œ๊ณตํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ธŒ๋ผ์šฐ์ €๋Š” ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด, ์ƒˆ ํŽ˜์ด์ง€ ๋กœ๋“œํ•˜๊ณ  ์ฒดํฌ๋ฐ•์Šค ํด๋ฆญ์‹œ, ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ค์ •ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ๋™์ž‘์€ ์ด๋ฒคํŠธ ์ „๋‹ฌ๊ณผ์ •์ด ๋๋‚œ ๋‹ค์Œ ์‹คํ–‰๋œ๋‹ค.

์›ํ•œ๋‹ค๋ฉด ์ด๋ฒคํŠธ ์ „๋‹ฌ ๊ณผ์ •์—์„œ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.

event.preventDefault() ๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ๋™์ž‘์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ์—์„œ false๋ฅผ ๋ฐ˜ํ™˜ํ•ด๋„ ๊ธฐ๋ณธ ๋™์ž‘์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

2.4 Event Object

2.5 ์ด๋ฒคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ JS๋กœ ์ด๋ฒคํŠธ ๊ด€๋ฆฌ๋ฅผ ํ•œ๋‹ค.

jQuery์˜ ์ด๋ฒคํŠธ ๊ด€๋ฆฌ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

jQuery API๋Š” ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฅ˜์™€ ๊ด€๊ณ„์—†์ด ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก bind() ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

jQuery ์ธ์Šคํ„ด์Šค์—์„œ bind()๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ์ด๋ฒคํŠธ ์ด๋ฆ„๊ณผ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ๋‹ค.

jQuery๋Š” click, submit, mouseover ๋“ฑ๊ณผ ๊ฐ™์€ ์ด๋ฒคํŠธ ํƒ€์ž…์˜ ๋‹จ์ถ•ํ˜•์„ ์ œ๊ณตํ•œ๋‹ค.

ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•œ ๋‹ค์Œ(์—˜๋ฆฌ๋จผํŠธ ์ƒ์„ฑ ํ›„) ์ด๋ฒคํŠธ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œˆ๋„์šฐ load ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ load ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œˆ๋„์šฐ์˜ load๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ๋ณด๋‹ค DOMContentLoaded๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ์‹ค์šฉ์ ์ด๋‹ค.

DOM์ด ์ค€๋น„๋œ ๋‹ค์Œ์— ํŽ˜์ด์ง€์˜ ์ด๋ฏธ์ง€์™€ ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ๋‚ด๋ ค๋ฐ›๋Š”๋‹ค.

DOMContentLoaded๋Š” ํŽ˜์ด์ง€์˜ ์ด๋ฏธ์ง€์™€ ์Šคํƒ€์ž์‹œํŠธ๋ฅผ ๋‚ด๋ ค๋ฐ›๊ธฐ ์ „์— ์‹คํ–‰๋œ๋‹ค.

์ฆ‰ ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๊ธฐ ์ „์— ํ•ญ์ƒ DOMContentLoaded๊ฐ€ ๋จผ์ € ํ˜ธ์ถœ๋œ๋‹ค.

๊ทผ๋ฐ, ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋ž˜์„œ jQuery๋Š” .ready(callback) ํ•จ์ˆ˜๋กœ ์ด ๊ธฐ๋Šฅ์„ ์ถ”์ƒํ™” ํ–ˆ๋‹ค.

2.6 ์ปจํ…์ŠคํŠธ ๋ณ€๊ฒฝ

ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์‹คํ–‰ ๋  ๋•Œ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Š” ์ด๋ฒคํŠธ์—์„œ ๊ฐ€์žฅ ํ˜ผ๋™์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

addEventListener()๋ฅผ ์ด์šฉ์‹œ ๊ธฐ์กด ์ง€์—ญ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋Œ€์ƒ HTML ์—˜๋ฆฌ๋จผํŠธ ์ปจํ…์ŠคํŠธ๋กœ ๋ฐ”๋€๋‹ค.

์›๋ž˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณด์กดํ•˜๋ ค๋ฉด ์ต๋ช… ํ•จ์ˆ˜๋กœ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ฐ์‹ธ์„œ ์›๋ž˜ ์ปจํ…์ŠคํŠธ์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

ํ”„๋ก์‹œ ํ•จ์ˆ˜๋กœ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด ๋ณผ ๋•Œ ์ด ํŒจํ„ด์„ ํ™œ์šฉ ํ–ˆ๋‹ค.

jQuery์˜ proxy() ํ•จ์ˆ˜ ํŒจํ„ด ์ฆ‰, ์‹คํ–‰ํ•  ํ•จ์ˆ˜์™€ ์›ํ•˜๋Š” ์ปจํ…์ŠคํŠธ๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹์„ ๋„๋ฆฌ ์‚ฌ์šฉํ•œ๋‹ค.

์ด ๋ถ€๋ถ„์€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค..

2.7 ์ด๋ฒคํŠธ ์œ„์ž„

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์€ ์ž์‹์˜ ์ด๋ฒคํŠธ๋ฅผ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ถ€๋ชจ์— ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

์ฆ‰, ๋ถ€๋ชจ์— ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค

jQuery๋Š” ์ด ๊ธฐ๋Šฅ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ œ๊ณตํ•œ๋‹ค.

delegate() ํ•จ์ˆ˜์— ์ž์‹ ์…€๋ ‰ํ„ฐ, ์ด๋ฒคํŠธ ํƒ€์ž…, ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋„˜๊ฒจ์ค˜์„œ ์ด๋ฒคํŠธ๋ฅผ ์œ„์ž„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ชจ๋“  li ์—˜๋ฆฌ๋จผํŠธ์— ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ, ์ด๋ฅผ ์ด์šฉํ•ด ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ˆ˜๋ฅผ ์ค„์ด๊ณ  ์„ฑ๋Šฅ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.8 ์ปค์Šคํ…€ ์ด๋ฒคํŠธ

์ปค์Šคํ…€ ์ด๋ฒคํŠธ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ํŒจํ„ด์ด๋‹ค.

๊ทธ๋ž˜์„œ ๋งŽ์€ jQuery ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์‚ฌ์šฉํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.

๋งŒ๋“œ๋ ค๋ฉด jQuery๋‚˜ Prototype ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์•ผํ•œ๋‹ค.

jQuery์—์„œ๋Š” trigger() ํ•จ์ˆ˜๋กœ ์ปค์Šคํ…€ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฒคํŠธ ์ด๋ฆ„์„ ์ด์šฉํ•ด namespace๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. namespace๋Š” ๋งˆ์นจํ‘œ์™€ ์—ญ์ˆœ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

trigger() ํ•จ์ˆ˜์— ์ธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ ์ด๋ฒคํŠธ(๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ์ด๋ฒคํŠธ)์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ปค์Šคํ…€ ์ด๋ฒคํŠธ๋„ DOM ํŠธ๋ฆฌ์—์„œ ์ „ํŒŒ๋œ๋‹ค.

2.9 ์ปค์Šคํ…€ ์ด๋ฒคํŠธ์™€ jQuery ํ”Œ๋Ÿฌ๊ทธ์ธ

Last updated

Was this helpful?