๐Ÿ”ฅ [UIUX] 0203 JAVASCRIPT Coding, ์ฝ”๋”ฉ ์ดˆ๊ธ‰~๊ณ ๊ธ‰ 18

You_Jin.ยท2025๋…„ 2์›” 3์ผ
1
post-thumbnail

โœ๏ธ 2025. 02์›” 03์ผ / javascript ์ดˆ๊ธ‰~๊ณ ๊ธ‰ 18

๐Ÿ’ก addEventListener()๋ฉ”์„œ๋“œ
์•ž์—์„œ ๋ฐฐ์šด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ํ•œ ์š”์†Œ์— ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋งŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๊ฒ€์ƒ‰์ฐฝ์˜ ๋‹๋ณด๊ธฐ ๋ฒ„ํŠผ ์ฒ˜๋Ÿผ click๊ณผ enter ์ด๋ฒคํŠธ๋ฅผ ํ•จ๊ป˜ ์—ฐ๊ฒฐํ•ด์•ผํ•  ๊ฒฝ์šฐ
addEventListener()๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰, ํ•˜๋‚˜์˜ ์š”์†Œ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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



๐Ÿ› ๋ฒ„๋ธ”๋ง๊ณผ ์บก์ณ๋ง
๋ฒ„๋ธ”๋ง์ด๋ž€ DOM์˜ ์ž์‹๋…ธ๋“œ์—์„œ ๋ถ€๋ชจ๋…ธ๋“œ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•˜๋ฉฐ,
๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
๋‹จ, ๋ชจ๋“  ์ด๋ฒคํŠธ๊ฐ€ ์ „๋ถ€ ๋ฒ„๋ธ”๋ง๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
์บก์ณ๋ง์€ ๋ฐ˜๋Œ€๋กœ DOM์˜ ๋ถ€๋ชจ๋…ธ๋“œ์—์„œ ์ž์‹๋…ธ๋“œ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•˜๋ฉฐ,
๊ธฐ๋ณธ๊ฐ’์€ false๋กœ ์บก์ณ๋ง์ด ๋˜์ง€ ์•Š๊ณ ,
addEventListenener์˜ ๋งˆ์ง€๋ง‰ ์ธ์ž๊ฐ’ ์ž๋ฆฌ์— true๋ฅผ ๋„ฃ์—ˆ์„ ๊ฒฝ์šฐ์—๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ’ฆ ๋ฒ„๋ธ”๋ง
๋ฒ„๋ธ”๋ง์˜ ์›๋ฆฌ๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
ํ•œ ์š”์†Œ์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์ด ์š”์†Œ์— ํ• ๋‹น๋œ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋™์ž‘ํ•˜๊ณ 
์ด์–ด์„œ ๋ถ€๋ชจ์š”์†Œ์˜ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€์žฅ ์ตœ์ƒ์œ„์— ์žˆ๋Š” ์กฐ์ƒ ์š”์†Œ๋ฅผ ๋งŒ๋‚ ๋•Œ๊นŒ์ง€์ด ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๋ฉด์„œ
์š”์†Œ ๊ฐ๊ฐ์— ํ• ๋‹น๋œ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
โญ event.target
๋ถ€๋ชจ์š”์†Œ์˜ ํ•ธ๋“ค๋Ÿฌ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋””์—์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฐ€์žฅ ์•ˆ์ชฝ์˜ ์š”์†Œ๋Š” target ์š”์†Œ๋ผ๊ณ  ๋ถ€๋ฅด๊ณ 
event.target์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
-
event.target์€ this(= event.currentTarget)์™€ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
- event.target์€ ์‹ค์ œ ์ด๋ฒคํŠธ๊ฐ€ ์‹œ์ž‘๋œ 'ํƒ€์ผ“'์š”์†Œ ์ž…๋‹ˆ๋‹ค.
๋ฒ„๋ธ”๋ง์ด ์ง„ํ–‰๋˜์–ด๋„ ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
- this๋Š” 'ํ˜„์žฌ ์š”์†Œ', ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํ• ๋‹น๋œ ์š”์†Œ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.
โ›” ๋ฒ„๋ธ”๋ง ์ค‘๋‹จํ•˜๊ธฐ
์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์€ ํƒ€๊ฒŸ ์ด๋ฒคํŠธ์—์„œ ์‹œ์ž‘ํ•ด์„œ html ์š”์†Œ๋ฅผ ๊ฑฐ์ณ
document๊ฐ์ฒด๋ฅผ ๋งŒ๋‚ ๋•Œ๊นŒ์ง€ ๊ฐ ๋…ธ๋“œ์—์„œ ๋ชจ๋‘ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋ช‡๋ช‡ ์ด๋ฒคํŠธ๋Š” window ๊ฐ์ฒด๊นŒ์ง€ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋•Œ ๋ชจ๋“  ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ์™„์ „ํžˆ ์ฒ˜๋ฆฌํ•œ ์ดํ›„์— ๋ฒ„๋ธ”๋ง์„ ์ค‘๋‹จํ•˜๋„๋ก ๋ช…๋ นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
event.stopPropergation()๋งค์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
๐Ÿ“ท ์บก์ฒ˜๋ง
์ด๋ฒคํŠธ์—๋Š” ๋ฒ„๋ธ”๋ง ์ด์™ธ์—๋„ ์บก์ฒ˜๋ง(capturing)์ด๋ผ๋Š” ํ๋ฆ„์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
์‹ค์ œ ์ฝ”๋“œ์—์„œ ์ž์ฃผ ์“ฐ์ด์ง€๋Š” ์•Š์ง€๋งŒ ์ข…์ข… ์œ ์šฉํ•œ ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.
ํ‘œ์ค€ DOM ์ด๋ฒคํŠธ ํ๋ฆ„์—๋Š” 3๋‹จ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
1. ์บก์ฒ˜๋ง ๋‹จ๊ณ„ = ์ด๋ฒคํŠธ๊ฐ€ ํ•˜์œ„์š”์†Œ๋กœ ์ „ํŒŒ๋˜๋Š” ๋‹จ๊ณ„
2. ํƒ€์ผ“ ๋‹จ๊ณ„ = ์ด๋ฒคํŠธ๊ฐ€ ์‹ค์ œ ํƒ€์ผ“ ์š”์†Œ์— ์ „๋‹ฌ๋˜๋Š” ๋‹จ๊ณ„
3. ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„ = ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ์š”์†Œ๋กœ ์ „ํŒŒ๋˜๋Š” ๋‹จ๊ณ„
์บก์ณ๋ง์€ ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ์˜ ๋งˆ์ง€๋ง‰ ์ธ์ˆ˜์ž๋ฆฌ์— true๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.
์ด๋•Œ ์ตœ์ƒ์œ„ ์š”์†Œ๋ถ€ํ„ฐ ํƒ€๊ฒŸ ์š”์†Œ๊นŒ์ง€ ์ˆœ์ฐจ์ ์œผ๋กœ ์•„๋ž˜๋กœ ๋‚ด๋ ค์˜ค๋ฉฐ ์ด๋ฒคํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.

      [๊ธฐ๋ณธํ˜•]
      ์š”์†Œ.addEventListener('์ด๋ฒคํŠธ๋ช…', ํ•จ์ˆ˜, true)
      ๋˜๋Š”
      ์š”์†Œ.addEventListener('์ด๋ฒคํŠธ๋ช…', ํ•จ์ˆ˜, {capture : true})

๐Ÿ—จ๏ธ ์†์œผ๋กœ ์ง์ ‘ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ด๋ž๋‹ˆ๋‹ค !
โœ–๏ธ
์•ž์œผ๋กœ๋„ ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•ด์„œ ๋งŽ์€ ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

profile
๐ŸŽง แด˜สŸแด€สษชษดษข: UXUI (Feat: coding) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โšชโ”€โ”€โ”€โ”€โ”€ ๐Ÿธ:๐Ÿท๐Ÿพ / ๐Ÿน:๐Ÿป๐Ÿผโ € ใ…ค โ—„โ—„โ €โ–โ–โ €โ–บโ–บ โ”€โ”€โ”€โ—‹ ๐Ÿ”Š

0๊ฐœ์˜ ๋Œ“๊ธ€