@ITF

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

Есть 4 кнопки сделанные из - div с классом ".menu_img_box", в каждый из них вложен .
При нажатии на кнопку, у картинки на этой кнопке меняется атрибут src.

ResetSelectedItem - функция для сбора уже нажатых кнопок.
SetSelectedItem - функция изменения атрибута src.

function addListener(event, obj, fn) {
    if (obj.addEventListener) {
        obj.addEventListener(event, fn, false);
    } else {
        obj.attachEvent("on"+event, fn);
    }
}

function ResetSelectedItem () {
	var elements = document.querySelectorAll('.menu_img_box > img'); 

	for (var i = 0; i < elements.length; i++) {
		elements[i].src = elements[i].src.replace('_r.png', '.png');
	};
};

function SetSelectedItem (Elem) {
	Elem.firstElementChild.src = Elem.firstElementChild.src.replace('.png', '_r.png');
};


window.onload = function () {
var slideIndex = 1;

	var ImgBoxElem = document.querySelectorAll('.menu_img_box');
	for(Elem of ImgBoxElem) {
		addListener('click', Elem, function (e) {
				ResetSelectedItem();
				SetSelectedItem(Elem);
			});		
	};
	
};


Сейчас происходит следующее:
При нажатии на кнопку, отрабатывает сброс, и функция установки атрибута применяется на 4-ую кнопку.
Что не правильно, т.к. нужно на конкретную кнопку.

если в функцию вместо "Elem" я буду передавать e.target, она отработает, но тут почему-то начинается интересное. Отрабатывает click только по самому блоку div, если я попадаю по иконке (img) в div'e - клик не срабатывает.

Что делать? Как сделать что бы менялось при клике как надо и кликало по всей кнопке?
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
@ITF Автор вопроса
WbICHA WbICHA
WbICHA @WblCHA 

const imgBoxElem = document.querySelectorAll('.menu_img_box');

imgBoxElem.forEach((elem) => {
 elem.addEventListener('click', () => {
  ResetSelectedItem();
  SetSelectedItem(elem);
 });
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
28 нояб. 2024, в 05:21
2000 руб./за проект
28 нояб. 2024, в 05:18
500 руб./за проект
28 нояб. 2024, в 03:51
3500 руб./за проект