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

Как правильно обработать событие нажатия кнопки мыши?

Есть некий контейнер вида:
<div class="wrapper">
    <div class="box"></div>
</div>

с такими стилями:
.wrapper {
    position: absolute;
    left: 20px;
    top: 20px;
}
.box {
    position: relative;
    width: 100px;
    height: 100px;
    background: red;
}

и с таким небольшим кодом:
window.addEventListener('mousedown', function(e) {
    console.log(e.target.className)
});


Проблема в том, что когда я нажимаю кнопкой мыши на красный квадрат, в консоли я получаю блок .box. А нужно, чтобы выводился .wrapper. Как сделать, чтобы событие нажатия кнопки мыши срабатывало только для родителя (.wrapper) ?

P.S.: Обработчик mousedown должен быть привязан только к window (!).

Готовый пример тут.

*UPDATE:
Вложенность может быть любая. Например, такая:
<div class="wrapper">
    <div class="wrapper-2">
        <div class="box"></div>
    </div>
</div>

Это тоже нужно учесть. При такой вложенности при нажатии на красный квадрат нужно получить .wrapper.

**UPDATE:
Рекурсивно пробежался наружу до нужного родителя:
document.addEventListener('mousedown', function(e) {
    let el = e.target;
    
    while(el.className !== 'wrapper') {
    	el = el.parentNode;
        console.log(el)
    }
    
    console.log(el.className)
}, false);
  • Вопрос задан
  • 171 просмотр
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
В обработчике события:
evt.currentTarget и this - это объект, на котором висит listener
evt.target - куда на самом деле кликнули

Демка: https://jsfiddle.net/cvqxk44t/

Рекурсивно пробежался
Зачем рекурсивно, есть же .closest('.wrapper')
Ответ написан
Ni55aN
@Ni55aN
e.target.parentNode
Ответ написан
Ваш ответ на вопрос

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

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