Есть массив абзацов и картинок текущей страницы. Все картинки внутри абзацов. Некоторые абзацы с картинками, а некоторые без. При клике по абзацу или картинке нужно запустить определённое действие в зависимости от того, по какому именно элементу кликнули.
<p>
<img src="image.jpg">Какой то текст. Какой то текст. Какой то текст. Какой то текст.
Какой то текст. Какой то текст. Какой то текст. Какой то текст. Какой то текст.
Какой то текст. Какой то текст. Какой то текст. Какой то текст.
</p>
<script>
var allParagraphsAndImages = document.querySelectorAll('p,img');
for(var i = 0; i < allParagraphsAndImages.length; i++) {
allParagraphsAndImages[i].addEventListener('click', function() {
if(this.tagName == 'IMG') {
// сделать что то если клик по самой картинке
}
if(this.tagName == 'P') {
// сделать что то если клик по абзацу за пределами картинки или по абзацу без картинки
}
});
}
</script>
Когда кликаю по абзацу, в котором нету картинки или же кликаю по абзацу с картинкой, но за пределами самой картинки, то все работает как и нужно. Но когда кликаю по картинке, то опять срабатывает действие, которое должно вызываться только при клике по абзацу.
Используйте event.target Вот пример:
document.querySelector('.container').addEventListener('click', (e)=>
{
console.log(e.currentTarget); // вернёт объект на котором висит обработчик (.container)
console.log(e.target); // вернёт объект по которому был сделан клик (.inner)
if (e.target.tagName === 'IMG')
{
// клик по картинке
}
else
{
// клик за пределами картинки, но в параграфе
}
})
.container
{
width: 500px;
height: 500px;
background: red;
}
.inner
{
width: 100px;
height: 100px;
background: blue;
}
<div class="container">
<img class="inner" />
</div>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При считывании информации с БД в textarea выводит отступы в начало строки
Тут нет ничего сложного, добавить проверку и записать в переменную результат