//html
<div class="div">
<button class="button">이벤트 버블링</button>
<div>
//javascript
const div= document.querySelector(".div");
const button = document.querySelector(".button");
div.addEventListener('click', function (){
console.log("div 클릭함");
});
button.addEventListener('click', function (){
console.log("button 클릭함");
});
button을 클릭하면 콘솔창에 "button 클림함" 과 "div 클림함" 이 순차적으로 출력된다.
//html
<div class="div">
<button class="button">이벤트 캡처링</button>
</div>
//javascript
const div= document.querySelector('.div')
const button= document.querySelector('.button')
div.addEventListener('click', function(){
console.log("div 클릭함");
} ,true);
button.addEventListener('click', function(){
console.log("button 클릭함");
} ,true);
button을 클릭하면 콘솔창에 "div 클림함" 과 "button 클림함" 이 순차적으로 출력된다.
function logEvent(event) {
event.stopPropagation();
}
//html
<ul class="parent">부모
<li>자식1</li>
<li>자식2</li>
<li>자식3</li>
</ul>
자식1, 2, 3의 li요소에 클릭 이벤트를 주려면 각각 이벤트리스너를 붙여야하는 비효율 작업이 발생한다.
-> 부모태그에 이벤트리스너를 걸어서 해결하자.
//html
<ul class="parent">부모
<li class=child>자식1</li>
<li class=child>자식2</li>
<li class=child>자식3</li>
</ul>
//javascript
document.querySelector('.parent').addEventListener('click',
function(){
if(event.target.classList.contains('.child')
{console.log(event.target.textContent + "선택함");
}
});
출처:
https://jjang-j.tistory.com/76
https://velog.io/@soulee__/JavaScript-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%B2%84%EB%B8%94%EB%A7%81-%EC%BA%A1%EC%B3%90-%EC%9C%84%EC%9E%84
https://velog.io/@rookieand/%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%B2%84%EB%B8%94%EB%A7%81-%EC%BA%A1%EC%B2%98%EB%A7%81-%EC%9C%84%EC%9E%84%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
https://vc972.tistory.com/18
https://velog.io/@jeris/%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%B2%84%EB%B8%94%EB%A7%81-%EC%BA%A1%EC%B3%90%EB%A7%81-%EC%9C%84%EC%9E%84