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

Как определить, что клик был по элементу?

Существует 2 независимые функции, которые слушают событие click:
1) document.addEventListener('click', aa);
2) document.getElementById('test').addEventListener('click', bb);

Элемент 'test', это таблица.

Функция bb переписывает innerHTML у элемента, а функция aa проверяет был ли клик по элементу.

Проблема: Функция аa получает event.target, к примеру <td>555</td>, но при проверке element.contains(event.target) получаю false, так как innerHTML уже переписан.
Почему так, ведь на вход обеих функций подаются первоначальные данные, где innerHTML еще не переписан?!

Попытался накидать пример на codepen, но не получилось, там я наблюдаю обратный эффект https://codepen.io/workcode/pen/MWymLPj
Даже установив задержку в 1сек между выполнением функции, там всегда получаю true, так в функцию aa попадают каким-то боком измененные данные.
Т.е. кликаю по 'Hey', а пишет, что клик был по 'Bye', почему?

PS. Объяснил наверно сложно, легче код из 10 строк посмотреть, и результат.
  • Вопрос задан
  • 479 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
OpenSky
@OpenSky
JavaScript Front-end Developer
Попробуй заменить листенеры на

document.addEventListener('click', clicker, true);
a.addEventListener('click', edt, true);


Вероятно, если события будут вызываться на этапе погружения, а не всплытия, то всё взлетит. Если я вообще правильно понял проблему)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lector_82
web front-end developer
Попробуйте проверять не так element.contains(event.target), а вот так
if(event.target.tagName == "DIV")
Ответ написан
Ваш ответ на вопрос

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

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