λΈŒλΌμš°μ €μ—μ„œ μ΄λ²€νŠΈκ°€ λ°œμƒν•˜κ³  μ „νŒŒλ˜λŠ” 방식

πŸ“ 이벀트 버블링 - Event Bubbling

이벀트 버블링은 νŠΉμ • ν™”λ©΄ μš”μ†Œμ—μ„œ μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ ν•΄λ‹Ή μ΄λ²€νŠΈκ°€ 더 μƒμœ„μ˜ ν™”λ©΄ μš”μ†Œλ“€λ‘œ μ „λ‹¬λ˜μ–΄ κ°€λŠ” νŠΉμ„±μ„ μ˜λ―Έν•©λ‹ˆλ‹€. μ΄λŠ” μ΄λ²€νŠΈκ°€ κ°€μž₯ ν•˜μœ„μ˜ μš”μ†Œμ—μ„œ μ‹œμž‘ν•˜μ—¬ μƒμœ„ μš”μ†Œλ‘œ μ „νŒŒλ˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
<body>
  <div class="layer1">
    <div class="layer2">
      <div class="layer3">
        </div>
     </div>
   </div>
 </body>

 <script>
  var divList = document.querySelectorAll('div');
  divList.forEach(function(div) {
    div.addEventListener('click', logEvent);
  });

  function logEvent(event) {
    console.log(event.currentTarget.className);
  }
</script>
      
ν΄λ¦­ν•œ 것이 κ°€μž₯ ν•˜μœ„μ˜ div νƒœκ·ΈμΈ "layer3"이라면, μ½˜μ†”μ—λŠ” "layer3 -> layer2 -> layer1" μˆœμ„œλ‘œ 좜λ ₯λ©λ‹ˆλ‹€. μ΄λŠ” μ΄λ²€νŠΈκ°€ ν•˜μœ„μ—μ„œ μƒμœ„ μš”μ†Œλ‘œ μ „νŒŒλ˜λŠ” νŠΉμ„±μ„ λ³΄μ—¬μ€λ‹ˆλ‹€.

πŸ“ 이벀트 캑쳐 - Event Capture

이벀트 μΊ‘μ³λŠ” 이벀트 λ²„λΈ”λ§κ³ΌλŠ” λ°˜λŒ€ λ°©ν–₯으둜 μ΄λ²€νŠΈκ°€ μ „νŒŒλ˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. μ΄λŠ” μ΄λ²€νŠΈκ°€ μ΅œμƒμœ„ μš”μ†Œμ—μ„œ μ‹œμž‘ν•˜μ—¬ κ°€μž₯ ν•˜μœ„μ˜ μš”μ†Œλ‘œ ν–₯ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
<body>
<div class="layer1">
  <div class="layer2">
    <div class="layer3">
      </div>
    </div>
  </div>
</body>

<script>
var divList = document.querySelectorAll('div');
divList.forEach(function(div) {
  div.addEventListener('click', logEvent, true);
});

function logEvent(event) {
  console.log(event.currentTarget.className);
}
</script>
      

πŸ“ stopPropagation()

stopPropagation() λ©”μ„œλ“œλŠ” 이벀트의 μ „νŒŒλ₯Ό μ€‘μ§€μ‹œν‚€λŠ” 역할을 ν•©λ‹ˆλ‹€. λ§Œμ•½ 이λ₯Ό μ‚¬μš©ν•˜λ©΄ μ΄λ²€νŠΈκ°€ ν˜„μž¬ μš”μ†Œμ—μ„œ 더 이상 μƒμœ„ λ˜λŠ” ν•˜μœ„λ‘œ μ „νŒŒλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
function logEvent(event) {
  event.stopPropagation();
  console.log(event.currentTarget.className);
}