Задать вопрос
@Combat7

Почему this выбирает родителя?

Вобщем у меня меню вида
<li><a>Пункт1</a>
                <ul>
                    <li><a>Пункт2</a></li>
</ul>
</li>

$("#menu_left li").click(function () {
                    $(this).addClass("active");
     });

Проблема в том, что при клике на подменю, в селекторе почему-то всеравно выбирается родитель, как это решить?
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const containerSelector = '#menu_left';
const itemSelector = `${containerSelector} li`;
const className = 'active';

Останавливайте всплытие событий:

$(itemSelector).click(function(e) {
  e.stopPropagation();
  $(this).addClass(className);
});

// или

document.querySelectorAll(itemSelector).forEach(function(n) {
  n.addEventListener('click', this);
}, e => {
  e.stopPropagation();
  e.currentTarget.classList.add(className);
});

Или вешайте обработчик на корневой элемент и поднимайтесь от целевого до ближайшего из тех, клики на которых хотите слушать:

$(containerSelector).click(e => {
  $(e.target).closest(itemSelector).addClass(className);
});

// или

document.querySelector(containerSelector).addEventListener('click', e => {
  const li = e.target.closest(itemSelector);
  if (li) {
    li.classList.add(className);
  }
});
Ответ написан
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы