@nemesis009

Почему обработчик событий срабатывает на дочерних элементах?

Подскажите, почему, когда подключаешь обработчик событий на родительский элемент, он срабатывает и на дочерних? Есть ли способ это изменить?
Для примера:
HTML
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Test</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <div class="main">
    <div class="sub-main">
      <div class="inner">test1</div>
    </div>
  </div>
  <script src="script.js"></script>
</body>
</html>


JS
const mainElement = document.querySelector(".main");
mainElement.addEventListener('click', function(e){
  console.log(e.currentTarget.className);
})


CSS
.main {
  width: 200px;
  height: 50px;
  border: 1px solid #333;
}
.sub-main {
  width: 150px;
  height: 45px;
  border: 1px solid red;
}
.inner {
  width: 100px;
  height: 40px;
  border: 1px solid purple;
  text-align: center;
}


То есть при клике на элемент inner событие срабатывает, а по задумке не должно.
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
Chaki09
@Chaki09
fullstack web developer
Событие проходит фазы жизненного цикла называемые "Всплытием и погружением", поэтому и отрабатывает событие. Подробнее в статье: https://learn.javascript.ru/bubbling-and-capturing
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@pravossos
попробуй
const inner = document.querySelector(".inner")
inner.addEventListener('click', (e) => {
      e.stopPropogation()
})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы