jQuery ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์„ ๋ฐฉ์ง€ํ•˜๋Š” 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•

jQuery ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์„ ๋ฐฉ์ง€ํ•˜๋Š” 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•

D
dongAuthor
5 min read

์›น ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ํŠน์ • ์š”์†Œ๋ฅผ ํด๋ฆญํ–ˆ๋Š”๋ฐ, ์›ํ•˜์ง€ ์•Š์•˜๋˜ ๋ถ€๋ชจ ์š”์†Œ์˜ ์ด๋ฒคํŠธ๊นŒ์ง€ ํ•จ๊ป˜ ์‹คํ–‰๋˜๋Š” ๊ฒฝํ—˜์„ ํ•ด๋ณด์…จ์„ ๊ฒ๋‹ˆ๋‹ค. ์ด๋Š” '์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง(Event Bubbling)'์ด๋ผ๋Š” ํ˜„์ƒ ๋•Œ๋ฌธ์ธ๋ฐ์š”. ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์€ ์ž˜ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋ฉด ์œ ์šฉํ•˜์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์–˜๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์„ ์œ ๋ฐœํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” jQuery์—์„œ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ณ , ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ œ์–ดํ•˜๋Š” ๋„ค ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ฝ”๋“œ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ํ†ตํ•ด ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋†’์ด๊ณ , ๋” ๊น”๋”ํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์„ ์–ป์œผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์€ ํŠน์ • DOM ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๊ทธ ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ์š”์†Œ๋กœ ์—ฐ์ด์–ด ์ „ํŒŒ๋˜๋Š” ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋ฌผ์†์˜ ๊ฑฐํ’ˆ์ด ์ˆ˜๋ฉด์œผ๋กœ ์˜ฌ๋ผ์˜ค๋Š” ๋ชจ์Šต๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ํ•ด์„œ '๋ฒ„๋ธ”๋งโ€™์ด๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™์—ˆ์ฃ .

์˜ˆ๋ฅผ ๋“ค์–ด, <div> ์•ˆ์— ์žˆ๋Š” <button>์„ ํด๋ฆญํ•˜๋ฉด, ๋จผ์ € <button>์˜ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ์ด์–ด์„œ ๋ถ€๋ชจ์ธ <div>์˜ ํด๋ฆญ ์ด๋ฒคํŠธ, ๊ทธ๋ฆฌ๊ณ  <body>, <html>, document ๊ฐ์ฒด ์ˆœ์„œ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ์—ฐ์‡„์ ์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

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

์ œ์–ด๋˜์ง€ ์•Š์€ ๋ฒ„๋ธ”๋ง์˜ ๋ฌธ์ œ์ 

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์„ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด, ์ด๋ฒคํŠธ๊ฐ€ ๋ถ€๋ชจ ์š”์†Œ๋กœ ์ „ํŒŒ๋˜๋ฉด์„œ ์˜๋„์น˜ ์•Š์€ ๋™์ž‘์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์‹ค์ œ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ์ ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ํ”ํ•œ ์˜ˆ๋Š” ํŒ์—…์ฐฝ(๋ชจ๋‹ฌ)์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต ํŒ์—…์ฐฝ ๋ฐ”๊นฅ์˜ ์–ด๋‘์šด ๋ฐฐ๊ฒฝ(overlay)์„ ํด๋ฆญํ•˜๋ฉด ํŒ์—…์ด ๋‹ซํžˆ๋„๋ก ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋ฐฐ๊ฒฝ <div>์— ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๊ฑธ์–ด๋‘๊ฒŒ ๋˜์ฃ . ํ•˜์ง€๋งŒ ํŒ์—…์ฐฝ ๋‚ด๋ถ€์˜ ์ฝ˜ํ…์ธ (๋ฒ„ํŠผ, ์ž…๋ ฅ์ฐฝ ๋“ฑ)๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ๋„ ์ด๋ฒคํŠธ๊ฐ€ ๋ฒ„๋ธ”๋ง๋˜์–ด ๋ฐฐ๊ฒฝ <div>์˜ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋ฉด, ์‚ฌ์šฉ์ž๋Š” ์ฝ˜ํ…์ธ ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ ค ํ•  ๋•Œ๋งˆ๋‹ค ํŒ์—…์ด ๋‹ซํžˆ๋Š” ๋ถˆํŽธ์„ ๊ฒช๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๋ฐฉ๋ฒ• 1: event.stopPropagation()

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์„ ๋ง‰๋Š” ๊ฐ€์žฅ ์ง์ ‘์ ์ด๊ณ  ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ event.stopPropagation() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ ์ด๋ฒคํŠธ ์ดํ›„์˜ ์ƒ์œ„ ์š”์†Œ๋กœ์˜ ์ด๋ฒคํŠธ ์ „ํŒŒ๋ฅผ ์ค‘๋‹จ์‹œํ‚ต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” event ๊ฐ์ฒด์—์„œ stopPropagation()์„ ํ˜ธ์ถœํ•˜๋ฉด, ํ•ด๋‹น ์š”์†Œ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€๋งŒ, ๊ทธ ์ด๋ฒคํŠธ๊ฐ€ ๋ถ€๋ชจ ์š”์†Œ๋กœ ์ „๋‹ฌ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋Š” <span> ์š”์†Œ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ, ๋ถ€๋ชจ์ธ <div> ์š”์†Œ์˜ ํด๋ฆญ ์ด๋ฒคํŠธ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ๋ง‰๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

// HTML ๊ตฌ์กฐ
// <div id="parent">
//   <span id="child">์ž์‹ ์š”์†Œ ํด๋ฆญ!</span>
// </div>

// ๋ถ€๋ชจ div์— ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ• ๋‹น
$('div').click(function(){
  alert('div๊ฐ€ ํด๋ฆญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
});

// ์ž์‹ span์— ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ• ๋‹น
$('span').click(function(e){
  // ์ด๋ฒคํŠธ ์ „ํŒŒ๋ฅผ ๋ง‰์Šต๋‹ˆ๋‹ค.
  e.stopPropagation();
  alert('span์ด ํด๋ฆญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
});

์œ„ ์˜ˆ์ œ์—์„œ <span> ์š”์†Œ๋ฅผ ํด๋ฆญํ•˜๋ฉด "span์ด ํด๋ฆญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ์•Œ๋ฆผ์ฐฝ๋งŒ ๋œจ๊ณ , event.stopPropagation()์— ์˜ํ•ด ์ด๋ฒคํŠธ ์ „ํŒŒ๊ฐ€ ์ฐจ๋‹จ๋˜์–ด "div๊ฐ€ ํด๋ฆญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ์•Œ๋ฆผ์ฐฝ์€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ e.stopPropagation() ์ฝ”๋“œ๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด, span ์•Œ๋ฆผ์ฐฝ์ด ๋œฌ ํ›„ div ์•Œ๋ฆผ์ฐฝ๋„ ์—ฐ์ด์–ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• 2: event.stopImmediatePropagation()

event.stopImmediatePropagation()์€ stopPropagation()๋ณด๋‹ค ํ•œ ๋‹จ๊ณ„ ๋” ๊ฐ•๋ ฅํ•œ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. stopPropagation()์ด ์ƒ์œ„ ์š”์†Œ๋กœ์˜ ์ด๋ฒคํŠธ ์ „ํŒŒ(๋ฒ„๋ธ”๋ง)๋งŒ ๋ง‰๋Š”๋‹ค๋ฉด, stopImmediatePropagation()์€ ๊ฐ™์€ ์š”์†Œ์— ํ• ๋‹น๋œ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ์‹คํ–‰๊นŒ์ง€๋„ ๋ง‰์Šต๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ์š”์†Œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

$('#myButton').on('click', function(e) {
  alert('์ฒซ ๋ฒˆ์งธ ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰!');
  // ๋™์ผ ์š”์†Œ์˜ ๋‹ค๋ฅธ ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰ ๋ฐ ๋ฒ„๋ธ”๋ง์„ ๋ชจ๋‘ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
  e.stopImmediatePropagation();
});

$('#myButton').on('click', function(e) {
  // ์ด ํ•ธ๋“ค๋Ÿฌ๋Š” ์ ˆ๋Œ€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  alert('๋‘ ๋ฒˆ์งธ ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰!');
});

$('#parentDiv').on('click', function(e) {
  // ์ด ํ•ธ๋“ค๋Ÿฌ ์—ญ์‹œ ๋ฒ„๋ธ”๋ง์ด ์ฐจ๋‹จ๋˜์–ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  alert('๋ถ€๋ชจ Div ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰!');
});

์œ„ ์ฝ”๋“œ์—์„œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด โ€œ์ฒซ ๋ฒˆ์งธ ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰!โ€ ์•Œ๋ฆผ์ฐฝ๋งŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. stopImmediatePropagation()์ด ํ˜ธ์ถœ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ™์€ ๋ฒ„ํŠผ์— ์—ฐ๊ฒฐ๋œ ๋‘ ๋ฒˆ์งธ ํ•ธ๋“ค๋Ÿฌ์™€ ๋ถ€๋ชจ div์˜ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋ชจ๋‘ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ๋Š” stopPropagation()์œผ๋กœ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ, ์ด์ฒ˜๋Ÿผ ๋ณต์žกํ•œ ์ด๋ฒคํŠธ ๋ฐ”์ธ๋”ฉ ๊ตฌ์กฐ์—์„œ๋Š” stopImmediatePropagation()์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• 3: ์กฐ๊ฑด๋ถ€ ํ™•์ธ (event.target)

๋•Œ๋กœ๋Š” ์ด๋ฒคํŠธ ์ „ํŒŒ๋ฅผ ๋ฌด์กฐ๊ฑด ๋ง‰๊ธฐ๋ณด๋‹ค, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ง€์ ์„ ํ™•์ธํ•˜์—ฌ ์กฐ๊ฑด๋ถ€๋กœ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ํ•ด๊ฒฐ์ฑ…์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. event.target ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ์ตœ์ดˆ๋กœ ๋ฐœ์ƒํ•œ ์š”์†Œ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€๋ชจ ์š”์†Œ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด์—์„œ event.target์„ ํ™•์ธํ•˜์—ฌ, ํŠน์ • ์ž์‹ ์š”์†Œ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ์ผ ๊ฒฝ์šฐ ๋™์ž‘์„ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// HTML ๊ตฌ์กฐ
// <div id="myDiv">
//   ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.
//   <a href="#" id="myLink">์ด ๋งํฌ๋Š” ํด๋ฆญํ•˜์ง€ ๋งˆ์„ธ์š”.</a>
// </div>

$("#myDiv").click(function(event) {
  // ์ด๋ฒคํŠธ ๋ฐœ์ƒ์ง€๊ฐ€ <a> ํƒœ๊ทธ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ์—๋งŒ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  if (!$(event.target).is("a")) {
    alert('Div๊ฐ€ ํด๋ฆญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค (๋งํฌ ์ œ์™ธ).');
    // ๊ธฐ์กด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋กœ์ง
  }
});

$("#myLink").click(function() {
    alert("๋งํฌ๊ฐ€ ํด๋ฆญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!");
});

์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด <a> ํƒœ๊ทธ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ๋Š” โ€œ๋งํฌ๊ฐ€ ํด๋ฆญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!โ€ ์•Œ๋ฆผ๋งŒ ํ‘œ์‹œ๋˜๊ณ , <div>์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์„ ํด๋ฆญํ–ˆ์„ ๋•Œ๋งŒ โ€œDiv๊ฐ€ ํด๋ฆญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค (๋งํฌ ์ œ์™ธ).โ€ ์•Œ๋ฆผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. stopPropagation()์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๋ถ€๋ชจ ์š”์†Œ์—์„œ ์ž์‹ ์š”์†Œ์˜ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ๊ฐ€ ๋” ์œ ์—ฐํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• 4: .off()๋กœ ์ด๋ฒคํŠธ ํ•ด์ œํ•˜๊ธฐ

off() ๋ฉ”์„œ๋“œ๋Š” ์š”์†Œ์— ๋ฐ”์ธ๋”ฉ๋œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ค‘๋ณต์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋˜์–ด ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋ฒ„๋ธ”๋ง ๋ฌธ์ œ๋ผ๊ธฐ๋ณด๋‹ค๋Š” ๋™์ผํ•œ ์ด๋ฒคํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ฑ๋ก๋œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ๋Š” ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ ์ „์— .off()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด์— ์žˆ๋˜ ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๊ณ , ๊ทธ ๋‹ค์Œ์— .on()์œผ๋กœ ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ ์ „์— ๊ธฐ์กด 'click' ์ด๋ฒคํŠธ๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
$(element).off('click').on('click', function () {
    // ์—ฌ๊ธฐ์— ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
});

์ด ๋ฐฉ๋ฒ•์€ ๋™์ ์œผ๋กœ ์ฝ˜ํ…์ธ ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ํŽ˜์ด์ง€์—์„œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์˜๋„์น˜ ์•Š๊ฒŒ ์ค‘๋ณต์œผ๋กœ ์Œ“์ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋ฒ„๋ธ”๋ง์„ ๋ง‰๋Š” ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š”, ์ด๋ฒคํŠธ ์ค‘๋ณต ์‹คํ–‰ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋” ์ ํ•ฉํ•œ ์ ‘๊ทผ๋ฒ•์ด๋ผ๋Š” ์ ์„ ๊ธฐ์–ตํ•ด์ฃผ์„ธ์š”.

๋” ๋‚˜์€ ์ด๋ฒคํŠธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•˜์—ฌ

์ง€๊ธˆ๊นŒ์ง€ jQuery์—์„œ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋„ค ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฐฉ๋ฒ•์€ ๊ณ ์œ ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • event.stopPropagation(): ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฒ„๋ธ”๋ง ์ฐจ๋‹จ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • event.stopImmediatePropagation(): ๊ฐ™์€ ์š”์†Œ์˜ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊นŒ์ง€ ์ค‘๋‹จ์‹œ์ผœ์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด๋ถ€ ํ™•์ธ: ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์š”์†Œ๋ฅผ ํ™•์ธํ•˜์—ฌ ์œ ์—ฐํ•˜๊ฒŒ ๋กœ์ง์„ ์ œ์–ดํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • .off(): ์ด๋ฒคํŠธ ์ค‘๋ณต ๋ฐ”์ธ๋”ฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

์ƒํ™ฉ์— ๋งž๋Š” ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜์—ฌ ์ด๋ฒคํŠธ ํ๋ฆ„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์ด๋ฒคํŠธ ๊ด€๋ฆฌ๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ์ฒซ๊ฑธ์Œ์ž…๋‹ˆ๋‹ค. ์ด ๊ธ€์ด ์—ฌ๋Ÿฌ๋ถ„์˜ jQuery ๊ฐœ๋ฐœ ์—ฌ์ •์— ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!

jQuery ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์„ ๋ฐฉ์ง€ํ•˜๋Š” 4๊ฐ€์ง€ ๋ฐฉ๋ฒ• | devdong