Здесь есть пара вопросов. Во-первых, this
является зарезервированным ключевым словом. Вы не можете использовать его в качестве имени аргумента функции. Во-вторых, this
во внутренней функции стрелки будет ссылаться на внешнюю область видимости из-за лексического связывания в функциях стрелки. Чтобы ссылаться на элемент img
, по которому щелкнули, вам нужно использовать анонимную функцию. И, наконец, отсутствует свойство classname
элемента. Вы можете использовать classList.add()
вместо этого. Попробуйте это:
var matches = document.querySelectorAll("img");
matches.forEach(el => {
el.addEventListener("click", function() {
this.classList.add("hidden");
});
});
.hidden {
display: none;
}
#keys img.zoom {
width: 10%;
padding: 0.1em;
margin: 0.5em;
}
<div id="keys">
<img src="images\Clothing\1.png" class="zoom" id="img0">
<img src="images\Clothing\2.png" class="zoom" id="img1">
<img src="images\Clothing\3.png" class="zoom" id="img2">
<img src="images\Clothing\4.png" class="zoom" id="img3">
<img src="images\Vegetables\4.png" class="zoom" id="img43">
<img src="images\Vegetables\5.png" class="zoom" id="img44">
</div>
Кроме того, вы должны удалить атрибут inline style
, так как это не очень хорошая практика. Вы должны применять стили с помощью внешних таблиц стилей. Поскольку у вас уже есть класс для элементов img
, на него можно напрямую нацелить.
- Обновление -
Изображения загружаются из POST запрос к базе данных и задержка перед отображением в DOM
. В этом случае вам необходимо привязать обработчики событий выше после запроса POST.
В качестве альтернативы, поскольку вы отметили jQuery в вопросе, вы можете использовать его для простой установки одного делегированного обработчика события:
Эквивалентная логика c в jQuery будет такой:
$(document).on('click', 'img.zoom', function() {
$(this).addClass('hidden');
});