Ошибка Uncaught TypeError: Cannot read property '1' of null

Статус
В этой теме нельзя размещать новые ответы.

kastembay

Постоялец
Регистрация
3 Янв 2013
Сообщения
208
Реакции
124
Доброго времени суток. Ни с того, ни с сего выскочила ошибка такого характера "Uncaught TypeError: Cannot read property '1' of null"

Вот код
Код:
plugin.getTabs = function() {
      var $matchingPanel;

      // Find the initial set of elements matching the setting.tabs
      // CSS selector within the container
      plugin.tabs = $container.find(settings.tabs),

      // Instantiate panels as empty jquery object
      plugin.panels = $(),

      plugin.tabs.each(function(){
        var $tab = $(this),
            $a = $tab.children('a'),

            // targetId is the ID of the panel, which is either the
            // `href` attribute for non-ajax tabs, or in the
            // `data-target` attribute for ajax tabs since the `href` is
            // the ajax URL
            targetId = $tab.children('a').data('target');

        $tab.data('easytabs', {});

        // If the tab has a `data-target` attribute, and is thus an ajax tab
        if ( targetId !== undefined && targetId !== null ) {
          $tab.data('easytabs').ajax = $a.attr('href');
        } else {
          targetId = $a.attr('href');
        }
        targetId = targetId.match(/#([^\?]+)/)[1]; - вот это строка

        $matchingPanel = settings.panelContext.find("#" + targetId);

        // If tab has a matching panel, add it to panels
        if ( $matchingPanel.length ) {

          // Store panel height before hiding
          $matchingPanel.data('easytabs', {
            position: $matchingPanel.css('position'),
            visibility: $matchingPanel.css('visibility')
          });

          // Don't hide panel if it's active (allows `getTabs` to be called manually to re-instantiate tab collection)
          $matchingPanel.not(settings.panelActiveClass).hide();

          plugin.panels = plugin.panels.add($matchingPanel);

          $tab.data('easytabs').panel = $matchingPanel;

        // Otherwise, remove tab from tabs collection
        } else {
          plugin.tabs = plugin.tabs.not($tab);
          if ('console' in window) {
            console.warn('Warning: tab without matching panel for selector \'#' + targetId +'\' removed from set');
          }
        }
      });
    };

Отдельная строка.
Код:
targetId = targetId.match(/#([^\?]+)/)[1];
Я уже туплю и не могу сообразить почему так?
 
Отдельная строка.
Код:
targetId = targetId.match(/#([^\?]+)/)[1];
Я уже туплю и не могу сообразить почему так?
Если совпадений нет, match возвращает null, далее вы пытаетесь обратиться к null по ключу, как к массиву, что приводит к ошибке.
Вот почитайте про match: Для просмотра ссылки Войди или Зарегистрируйся
Наверное, есть смысл делать проверку возвращаемого значения на null.
 
Вот парадокс: делаю страницу как HTML, без движка, все работает на ура и никаких ошибок нет. Как только делаю на движке, появляется эта ошибка. Движок ImageCMS. Буду разбираться дальше.
 
Вот парадокс: делаю страницу как HTML, без движка, все работает на ура и никаких ошибок нет. Как только делаю на движке, появляется эта ошибка. Движок ImageCMS. Буду разбираться дальше.
Так посмотрите, что возвращает ваша переменная. вместо вашей этой строки:
targetId = targetId.match(/#([^\?]+)/)[1];
поставьте элементарное alert(targetId); - что вернет?
Вот у вас например, children метод используется - он получает только дочерние элементы и вниз по иерархии элементы не выбирает Не исключено, что элемент, содержащий нужный параметр вложен еще в один контейнер и children обращается к этому контейнеру. Попробуйте заменить children на find.
 
Перетянул шаблон, добавил к подключению js нижний пробел, получилась такая конструкция <script src="{$THEME}_js/jquery.easytabs.js" type="text/javascript"></script>, ошибка не появилась, видать руки мои "золотые")))

Тему можно закрывать.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху