๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ JavaScript

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง, ์ด๋ฒคํŠธ ์บก์ณ๋ง - DOM์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง

by Tamii 2021. 2. 22.
๋ฐ˜์‘ํ˜•

div, body,html ์— ๋ชจ๋‘ click ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์„ ๋•Œ

โ– currentTarget & target 

currentTarget

์ด๋ฒคํŠธ์˜ ์ง„์งœ ์ฃผ์ธ

 

target

์ด ์ด๋ฒคํŠธ๊ฐ€ ๋ˆ„๊ตฌ๋–„๋ฌธ์— ์‹คํ–‰์ด ๋๋Š”๊ฐ€ 

 

๐Ÿ‘‰ ์ด๋ฒคํŠธ๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์—ฐ์ขŒ์ œ๋กœ ์‹คํ–‰๋จ 

๋”ฐ๋ผ์„œ ์ด๋ฒคํŠธ๋Š” event-flow ๋ฅผ ๊ฐ€์ง 

 

 

 

 

 

 

โ– CapturePhase &  BubblePhase

 

 

 

์ถœ์ฒ˜ https://www.youtube.com/watch?v=7gKtNC3b_S8&list=PLsTXYDw7vAcRW9SZnHBeF4HKwATrNi0Gg&index=4

capture phase 

porpoagate-up

๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด๊ฒƒ๋ถ€ํ„ฐ ์‹คํ–‰ 

html > body > div

 

Target pahse

porpoagate-down

๋‹น์‚ฌ์ž ์‹คํ–‰ 

 

Bubble phase

propogate-down

๋‹ค์‹œ ๋‚ด๋ ค๊ฐ€๋ฉฐ ์‹คํ–‰ 

 

์“ธ ๋ฐ ์—†๋Š” ์ค‘๋ณต ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ฒŒ ๋จ 

html > body > div> body > html 

 

 

 

 

๐Ÿ“Œ ex) ์˜ˆ์‹œ๋กœ ๊ณต๋ถ€ํ•˜๊ธฐ 

event flow phase ์ค‘ ์–ด๋Š๋‹จ๊ณ„์—์„œ ์‹คํ–‰๋˜๊ณ  ์‹ถ์œผ์ง€ ์„ ํƒ capture vs bubble (๊ธฐ๋ณธ๊ฐ’)

 

๋”ฐ๋ผ์„œ divํด๋ฆญ์‹œ 

div > body > html

 

target.addEventListner (' ์ด๋ฒคํŠธ ํƒ€์ž… ' , function () {์‹คํ–‰ํ• ๊ฑฐ } , False(Bubble๋•Œ ์‹คํ–‰) True(Capture๋•Œ ์‹คํ–‰))

  

const body = document.body;
const div = document.querySelector('div');
const html = document.documentElement;
div.addEventListener('click', function(){
    console.log("Div");
});


body.addEventListener('click', function(){
    console.log("Body");
});


html.addEventListener('click', function(){
    console.log("html");
});

1) ๋ชจ๋‘๋‹ค bubble์ผ ๋•Œ div click

 

 

2) body ->  capture & div click

const body = document.body;
const div = document.querySelector('div');
const html = document.documentElement;
div.addEventListener('click', function(){
    console.log("Div");
});


body.addEventListener('click', function(){
    console.log("Body");
},true);


html.addEventListener('click', function(){
    console.log("html");
});

 

 

 

 

3) html->true ๋กœ ํ•˜๊ณ  body  click

 

 

 

๋„ˆ๋ฌด๋„ˆ๋ฌด ์ข‹์€ ๊น€๋ฒ„๊ทธ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค๐Ÿ”ฅ

www.youtube.com/watch?v=7gKtNC3b_S8&list=PLsTXYDw7vAcRW9SZnHBeF4HKwATrNi0Gg&index=4


 

 

โ– event ๊ฐ์ฒด

div.addEventListener('click', function(e){
    console.log("Div");
});

event ๋ฅผ ๋ฐœ์ƒํ•˜๋ฉด  ํ•„์š” ์œ ๋ฌด์— ์ƒ๊ด€์—†์ด ๊ฐ์ฒด๋ฅผ ๊ผญ ๋ฐ˜ํ™˜ํ•ด ์คŒ 

 

preventDefault()

default ๋Œ€๋กœ ํ•˜์ง€ ๋ง์ž

 

 

 

โ– input ๊ณผ button  ์ด๋ฒคํŠธ ์˜ˆ์‹œ 

    <form action="">
        <input type="email" name="email">
        <button id="btn" type="submit">์ œ์ถœ</button>
    </form>
    <script>
        const input = document.querySelector('input');
        input.addEventListener('input',function(e){
            console.log(e.currentTarget);
            console.log(e.currentTarget.value);
        })
        
        const btnelm = document.getElementById('btn')
        btn.addEventListener('click',function(e){
            alert('btn click');
        })
    </script>

๋Œ“๊ธ€