const renderCard = (cards) => {
cardsContainer.prepend(createCard(cards));
};
popupFormTypePlace.addEventListener('submit', (evt) => {
evt.preventDefault();
renderCard({
name: popupInputTypePlace.value,
link: popupInputTypeLink.value,
});
evt.target.reset();
closePopup(popupTypePlace);
});
const createCard = (cards) => {
const newCard = cardsTemplate.cloneNode(true);
const cardName = newCard.querySelector('.element__title');
const cardImage = newCard.querySelector('.element__item');
cardName.textContent = cards.name;
cardImage.setAttribute('src', cards.link);
cardImage.setAttribute('alt', cards.link);
return newCard
};
initialCards.forEach((cards) => {
const newCard = createCard(cards)
cardsContainer.append(newCard)
});
const likeButtons = document.querySelectorAll('.element__button');
likeButtons.forEach((likeButton) => {
likeButton.addEventListener('click', toggleLike);
});
function toggleLike(evt) {
evt.target.classList.toggle('element__button_active');
};
const deleteButtons = document.querySelectorAll('.element__basket');
deleteButtons.forEach((deleteButton) => {
deleteButton.addEventListener('click', elementDelete);
})
function elementDelete(evt) {
evt.target.closest('.element').remove();
};
const cardPictures = document.querySelectorAll('.element__item');
cardPictures.forEach((cardPicture) => {
cardPicture.addEventListener('click', openPicture);
})
function openPicture(evt) {
openPopup(popupTypePicture);
const imageSrc = evt.target.getAttribute('src');
const imageAlt = evt.target.getAttribute('alt');
const card = evt.target.closest('.element');
const imageTitle = card.querySelector('.element__title').textContent;
const popupPicture = popupTypePicture.querySelector('.popup__picture');
const popupName = popupTypePicture.querySelector('.popup__name');
popupPicture.src = imageSrc;
popupPicture.alt = imageAlt;
popupName.textContent = imageTitle;
};
Как исправить готовый код?Код надо привести в вопросе, окружив тегом <code>
addEventListener('click', ...
click
выше, на общем родителе всех этих карточек – cardsContainer
. Всего один слушатель. В обработчике разбирать, по кому, собственно, кликнули: смотреть класс кликнутого элемента и искать ближайшую к нему карточку.cardsContainer.addEventListener('click', ({ target }) => {
if (target.classList.contains('element__button')) {
// toggle Like
target.classList.toggle('element__button_active');
} else if (target.classList.contains('element__basket')) {
// delete
target.closest('.element').remove();
} else if (target.classList.contains('element__item')) {
// open picture
openPicture({ target });
}
});
// и убрать всё ставшее ненужным