Есть массив абзацов и картинок текущей страницы. Все картинки внутри абзацов. Некоторые абзацы с картинками, а некоторые без. При клике по абзацу или картинке нужно запустить определённое действие в зависимости от того, по какому именно элементу кликнули.
<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>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
При считывании информации с БД в textarea выводит отступы в начало строки
Тут нет ничего сложного, добавить проверку и записать в переменную результат