Как настроить связь между кнопками и изображениями для создания возможности произвольного выбора?

Как можно сделать, чтобы при нажатии на кнопку пагинации показывался соответствующий блок с изображением в java script?

products - коллекция блоков с изображениями, где активный класс - product-slider__wrapper--active
paginationButtons - коллекция кнопок, где активная кнопка класса - slider-pagination__button--current

const onPaginationButtonClick = (evt) => {
// Ищем нажатую кнопку в коллекции, чтобы связать ее с номером блока с изображением
  for (let k = 0; k < paginationButtons.length; k++) {
    if(evt.target = paginationButtons[k]) { // Возникает ошибка: Cannot set property target of #<Event>

    // Ищем активный блок с изображением в коллекции
      for (let i = 0; i < products.length; i++) {

        if(isActive(products[i])) {
          // Убираем активный класс с текущего блока с изображением
          products[i].classList.remove('product-slider__wrapper--active');
          // Добавляем активный класс к блоку с изображением, связанному с нажатой кнопкой
          products[k].classList.add('product-slider__wrapper--active');
          paginationButtons[k].classList.add('slider-pagination__button--current');
          // Возможно, нужно добавить break, но не понятно, где
        }
      }
    }
  };
}
// Назначаем обработчик событий для каждой кнопки
const chooseSlide = () => {
  paginationButtons.forEach((sliderButton) => {
    sliderButton.addEventListener('click', onPaginationButtonClick)
  });
}
  • 11 октября 2023 г. 18:58
Ответы на вопрос 2
Ошибка возникает из-за неправильного условия внутри цикла for. Вместо `if(evt.target = paginationButtons[k])` нужно использовать `if(evt.target === paginationButtons[k])`.

Также стоит добавить `break` после добавления класса к блоку с изображением, чтобы прервать внутренний цикл после найденного активного блока.

И еще одно замечание - внутри обработчика событий `onPaginationButtonClick` вы используете функцию `isActive`, которая не определена в предоставленном коде. Вам нужно определить эту функцию, чтобы она возвращала true для активного блока с изображением и false для всех остальных блоков.

Вот исправленный код:

```javascript
const onPaginationButtonClick = (evt) => {
  for (let k = 0; k < paginationButtons.length; k++) {
    if(evt.target === paginationButtons[k]) {

      for (let i = 0; i < products.length; i++) {
        if(isActive(products[i])) {
          products[i].classList.remove('product-slider__wrapper--active');
          products[k].classList.add('product-slider__wrapper--active');
          paginationButtons[k].classList.add('slider-pagination__button--current');
          break; // добавляем break после добавления класса
        }
      }
    }
  }
};

const chooseSlide = () => {
  paginationButtons.forEach((sliderButton) => {
    sliderButton.addEventListener('click', onPaginationButtonClick)
  });
};
```

Не забудьте определить функцию `isActive`, чтобы код работал правильно.
Используйте операторы == или === для проверки, а не для присваивания.evt.target === paginationButtons[k]
Похожие вопросы