본문 바로가기
프론트엔드/Javascript

[Javascript] 이벤트 전파 방지 stopPropagation()

by jinwanseo 2021. 2. 3.
728x90

자바스크립트 부모로의 이벤트 전파 방지

 

Event.stopPropagation();

 

간단 설명 ↓

input 이벤트 발생시 input>div>section 순으로 이벤트 전파 by jinwanseo

자바스크립트에서 

자식 엘리먼트에서 이벤트 발생시,

부모 엘리먼트에 같은 이벤트가 설정되어있다면,

해당 이벤트에 할당된 기능도 함께 실행된다.

이는 이벤트 전파 현상으로 인한 건데,

상단의 그림과 같이 이벤트가 전파되어진다.

 

위와 같은 현상을 방지하기 위해서는

Event.stopPropagation()을 사용해야하는데,

아래 예제를 참고하도록 한다.

 

샘플 예제↓

 

[Html]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>StopPropagation Example</title>
</head>
<body>
    <section id="section-sample">
        <div id="div-sample">
            <input type="button" value="클릭!">
        </div>
    </section>
    <script src="stopPropagation.js"></script>
</body>
</html>

 

[Javascript]

let secElem = document.querySelector('#section-sample');
let divElem = document.querySelector('#div-sample');
let btn = document.querySelector('#div-sample>input[type="button"]');

//Section 이벤트 생성
secElem.addEventListener('click', e => {
    alert('section 클릭!');
});

//Div 클릭 이벤트 생성
divElem.addEventListener('click', e => {
    alert('div 클릭!');
});

//Input 버튼 클릭 이벤트 생성
btn.addEventListener('click', e => {
    alert('button 클릭!');
});

 

[결과 출력]

자바스크립트 이벤트 전파 현상

위 예제는 부모 엘리먼트와 자식 엘리먼트의

모든 이벤트가 실행되고 있다.

 

이번에는 스크립트에 하단 코드와 같이

Event.stopPropagation()를 코드에 추가해 보도록 한다.

 

//Event.stopPropagation() 추가하여,
//이벤트 전파 방지

let secElem = document.querySelector('#section-sample');
let divElem = document.querySelector('#div-sample');
let btn = document.querySelector('#div-sample>input[type="button"]');

//Section 이벤트 생성
secElem.addEventListener('click', e => {
    alert('section 클릭!');
});

//Div 클릭 이벤트 생성
divElem.addEventListener('click', e => {
    alert('div 클릭!');
});

//Input 버튼 클릭 이벤트 생성
btn.addEventListener('click', e => {
	//자식 엘리먼트 이벤트에 추가!
	e.stopPropagation();
    alert('button 클릭!');
});

 

[결과 출력]

자바스크립트 이벤트 전파 방지 예제

 

 

728x90

댓글