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

EventTarget.addEventListener()

target.addEventListener(type, listener[, options]);

์†Œ๊ฐœ

1. EventTarget์˜ ๋ฉ”์„œ๋“œ์ด๋‹ค.

2. ์ฃผ์–ด์ง„ ์ด๋ฒคํŠธ ์œ ํ˜•์—, EventListener๋ฅผ ๊ตฌํ˜„ํ•œ ํ•จ์ˆ˜๋ฅผ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•ด ์ž‘๋™ํ•œ๋‹ค.

3. EventTarget์€ ๋ณดํ†ต Element, Document, Window์ง€๋งŒ, XMLHttpRequest์™€ ๊ฐ™์ด ์ด๋ฒคํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜

1) type
- ๋ฐ˜์‘ํ•  ์ด๋ฒคํŠธ ์œ ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ๋ฌธ์ž์—ด. ex) 'click'
 
2) listener
- ์ง€์ •๋œ ํƒ€์ž…์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, callbackํ•จ์ˆ˜๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.
- ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” '์ด๋ฒคํŠธ ๊ฐ์ฒด'๋กœ ๋ฏธ๋ฆฌ ์ •์˜ ๋˜์–ด ์žˆ๋‹ค.
- ์ด๋ฆ„์œผ๋กœ๋Š” e, event๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
 
 
์ด๋ฒคํŠธ ๊ฐ์ฒด(e)

e.target ๊ณผ ๊ฐ™์ด ์ด๋ฒคํŠธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์•„๋ž˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

target.addEventListener('click',(e)=>{
    console.log(e);
    console.log('callback test');
}); 

 

 

์‚ฌ์šฉ ์˜ˆ์‹œ) 1. ํ•จ์ˆ˜ ์•ˆ์—์„œ ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ฒ„ํŠผ๋“ค์ด ๋ณด์ด๋„๋ก, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฒ„ํŠผ๋“ค์€ eventListener์†์„ฑ์„ ๊ฐ–๋„๋ก ํ•œ๋‹ค.

<button type="button">Button Appear</button>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
const divs =[ ...document.getElementsByTagName('div')] 
const appearBtn = document.getElementsByTagName('button')[0];
appearBtn.addEventListener('click',makeBtn)

function makeBtn(){ 
    divs.forEach(elem => {
        const btn = document.createElement('button');
        btn.textContent = 'Example' ;
        btn.addEventListener('click',(e)=>{
            console.log('callback test');
        })
        elem.appendChild(btn);
    });
}

 

 

์‚ฌ์šฉ ์˜ˆ์‹œ) 2. ์ฝœ๋ฐฑํ•จ์ˆ˜์— ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ(์ต๋ช…ํ•จ์ˆ˜)

const edit = document.createElement('button');
edit.addEventListener('click',() => editComment(user_id,comment_id)); 

const remove = document.createElement('button');
remove.addEventListener('click',()=> removeComment(user_id,comment_id));

์ฝœ๋ฐฑํ•จ์ˆ˜์— ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ต๋ช…ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์—์„œ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์€ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ต๋ช… ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ์ต๋ช…ํ•จ์ˆ˜ ์•ˆ์—์žˆ๋Š” ์ฝ”๋“œ๋„ ๊ฐ™์ด ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

์‚ฌ์šฉ ์˜ˆ์‹œ) 3. ์ฝœ๋ฐฑํ•จ์ˆ˜์— ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ(ํด๋กœ์ €)

const edit = document.createElement('button');
edit.addEventListener('click',editComment(user_id,comment_id)); 

function editComment(user_id,comment_id) { 
	return async function(){
  ... 
  try {
    await axios.patch(`/comments/${comment_id}`, { comment: newComment });
    ... 
  } catch (err) {
    console.error(err);
  }
}}

- ํ•จ์ˆ˜ ์‹คํ–‰ํ˜•ํƒœ๋ฅผ ์ธ์ž๋กœ ๋„˜๊ธฐ๊ณ , ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์—์„œ ๋‚ด๋ถ€ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•์‹์ด๋‹ค.

- ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋‹ˆ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•œ ๊ฒƒ์ด๋‚˜ ๋‹ค๋ฆ„์—†๋‹ค.

- editComment(user_id,comment_id) ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ฐ˜ํ™˜๊ฐ’์ธ async function(){..} ์ด ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ๋“ฑ๋ก๋œ๋‹ค.

 

์ •๋ฆฌ) ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜ ํ˜•ํƒœ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์ด์ง€, ์‹คํ–‰์‹œํ‚จ ํ˜•ํƒœ๋ฅผ ์ „๋‹ฌํ•˜๋Š”๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

document
    .querySelector('.classBtn')
    .addEventListener('click', addScript('class'));

- ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ํ•œ์ค„ ํ•œ์ค„ ์ฝ์œผ๋ฉด์„œ ์ฆ‰์‹œ ์‹คํ–‰ํ•ด๋ฒ„๋ฆฐ๋‹ค.

- ํด๋ฆญ์‹œ ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๊ณ  ์• ์‹œ๋‹น์ดˆ์— ์ฝœ๋ฐฑํ•จ์ˆ˜๋„ ์•„๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚จ ํ˜•ํƒœ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

 

Reference

1. https://developer.mozilla.org/ko/docs/Web/API/EventTarget/addEventListener

๋ฐ˜์‘ํ˜•