Argento: «Cannot call method 'addClassName' of undefined» / «$$(...)[0] is undefined»

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8886
  • Регистрация: 20.02.2010

09.12.2013 17:47

Описание сбоя:
  • Оформительская тема: Argento
  • Место сбоя: открытие главной витринной страницы
  • Диагностическое сообщение:
    в консоли Google Chrome: «Uncaught TypeError: Cannot call method 'addClassName' of undefined»
    в консоли Mozilla Firefox: «TypeError: $$(...)[0] is undefined»
  • Причина сбоя: некачественное программирование темы

Способ устранения сбоя:
    • Файл: skin/frontend/argento/default/js/tabBuilder.js
    • Вероятная строка: 51
    • Что найти:
      $$('.tabs li:first-child')[0].addClassName('first');
      $$('.tabs li:last-child')[0].addClassName('last');

    • На что заменить:
      if (0 < $$('.tabs li').length) {
          $$('.tabs li:first-child')[0].addClassName('first');
          $$('.tabs li:last-child')[0].addClassName('last');
      }

    • Файл: skin/frontend/argento/default/js/tabBuilder.js
    • Вероятная строка: 84 (после внесения предыдущей правки)
    • Что найти:
      $(container).select('.tabs li')[index].addClassName('active');
      $(container).select('.content .tab')[index].addClassName('active');
      $(container).select('.content .tab').invoke('setStyle', {'display': 'none'});
      $(container).select('.content .tab')[index].setStyle({'display': 'block'});

    • На что заменить:
      /** @type {?HTMLLIElement} */
      var listItem = $(container).select('.tabs li')[index];
      if (listItem instanceof HTMLLIElement) {
          $(container).select('.tabs li')[index].addClassName('active');
      }
      $(container).select('.content .tab').invoke('setStyle', {'display': 'none'});
      /** @type {?HTMLElement} */
      var element = $(container).select('.content .tab')[index];
      if (element instanceof HTMLElement) {
          $(container).select('.content .tab')[index].addClassName('active');
          $(container).select('.content .tab')[index].setStyle({'display': 'block'});
      }


Поделиться темой: