aliencash
@aliencash
Партизан

Почему почему код срабатывает хотя должен работать только по клику?

На странице много миниатюр с классом imgresize-wrapper. Нужно слушать клик на миниатюру, чтобы показать увеличенную версию картинки. Делаю это так:

function imgResize(a) {
	a.classList.toggle('imgresized');
}
var z = document.querySelectorAll('.imgresize-wrapper');
for(x = 0; x < z.length; x++) {
	z[x].addEventListener('click', imgResize(z[x]));
}

Однако сразу показываются полные версии изображений, не дожидаясь клика.
Где я ошибся?
  • Вопрос задан
  • 133 просмотра
Решения вопроса 2
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
function imgResize(a) {
  a.classList.toggle('imgresized');
}
var z = document.querySelectorAll('.imgresize-wrapper');
for(x = 0; x < z.length; x++) {
  z[x].addEventListener('click', imgResize.bind(null, z[x])));
}


Потому, что событию клик передаётся не исполняемая функция, а уже результат её исполнения. Можно решить либо через замыкание, либо как я указал выше.
Ответ написан
@forkhammer
Fullstack-разработчик (Django, Angular)
Потому что в addEventListener передается не функция-обработчик, а ее результат. Нужно изменить так
for(x = 0; x < z.length; x++) {
  z[x].addEventListener('click', imgResize.bind(null, z[x]));
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы