Event Capture, Propagation, Bubbling and Once

<div class="one">
<div class="two">
<div class="three"></div>
</div>
</div>Bubbling
Capture
Stop Propagation
Once
Last updated

<div class="one">
<div class="two">
<div class="three"></div>
</div>
</div>Last updated
const divs = document.querySelectorAll('div');
function logText(e) {
console.log(this.classList.value);
}
divs.forEach(div => div.addEventListener('click', logText));
//div.two를 클릭할 경우 console창엔
//two
//one
//div.three를 클릭할 경우
//three
//two
//oneconst divs = document.querySelectorAll('div');
function logText(e) {
console.log(this);
}
divs.forEach(div => div.addEventListener('click', logText));
//console 창엔
//<div class="three"></div>
//<div class="two"></div>
//<div class="one"></div>divs.forEach(div => div.addEventListener('click', logText, {
//위에서 아래로 흐르는 기능을 사용한다는 거다.
capture: true
}));divs.forEach(div => div.addEventListener('click', logText, {
//위에서 아래로 흐르는 기능을 사용한다는 거다.
capture: false
}));function logText(e) {
console.log(this.classList.value);
e.stopPropagation(); //stop bubbling!
}function logText(e) {
console.log(this.classList.value);
e.stopPropagation(); // stop bubbling!
// console.log(this);
}
divs.forEach(div => div.addEventListener('click', logText, {
capture: true
}));
//console에
//one만 뜬다.function logText(e) {
console.log(this.classList.value);
// e.stopPropagation(); // stop bubbling!
// console.log(this);
}
divs.forEach(div => div.addEventListener('click', logText, {
capture: false,
once: true
}));<button></button>button.addEventListener('click', () => {
console.log('Click!!!');
}, {
once: true
});