Задать вопрос
@svm2001

Почему Javascript отрабатывает по разному?

Вопрос такой. На dev версии этот код отлично работает. (стек: pug + webpack), когда натягиваю это на Битрикс, тот же самый код не работает. Причину не могу понять. Загвоздка: в коде я специально вывожу sectorInd в консоль чтобы посмотреть его значение. На этапе верстки при наведении все работает как нужно - 1я картинка имеет 0й индекс, 2я - 1й и тд, а при натяжке показывает только 1 и 3 индексы, игнорирую второй. Также иногда выскакивает 5й, хотя у меня всего 3 картинки максимум.

function sectorIndex(el) {
        const children = el.parentNode.childNodes,
            i = 0;
        for (let i = 0; i < children.length; i++) {
            if (children[i] === el) {
                return i;
            }
        }
        return -1;
    }
function changeCardSlider(elem) {
  var sectorInd = sectorIndex(elem);
  if (sectorInd === -1) {
    return;
  }
  var cardContainer = elem.closest('.product-card_img-slider_container');
  var containerImages = cardContainer.querySelectorAll('.product-card_img');
  var containerDots = cardContainer.querySelectorAll('.product-card_dot');
  var activeImg = cardContainer.querySelector('.product-card_img.active-img');
  if (activeImg) {
    activeImg.classList.remove('active-img');
    console.log(sectorInd)
  }
  var activeDot = cardContainer.querySelector('.product-card_dot.active-dot');
  if (activeDot) {
    activeDot.classList.remove('active-dot');
  }
  containerImages[sectorInd].classList.add('active-img');
  containerDots[sectorInd].classList.add('active-dot');
}
function ProductsCards() {
  var productCardsSectors = document.querySelectorAll('.product-card_img-sectors .product-card_img-sector');
  if (productCardsSectors) {
    productCardsSectors.forEach(function (productCardsSector) {
      productCardsSector.addEventListener('mouseover', function () {
        changeCardSlider(productCardsSector);
      });
    });
  }
  var productCardsDots = document.querySelectorAll('.product-card_dots .product-card_dot');
  if (productCardsDots) {
    productCardsDots.forEach(function (productCardsDot) {
      productCardsDot.addEventListener('click', function () {
        changeCardSlider(productCardsDot);
      });
    });
  }
}


6437b6c54ceb3032675318.jpeg
6437b6f7ec1f9506604232.jpeg
  • Вопрос задан
  • 76 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Проверку надо делать. Почему у вас отсутствует элемент на странице никто не знает.
if (containerImages[sectorInd]) {
  containerImages[sectorInd].classList.add('active-img');
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы