Uncaught TypeError: Cannot read property 'top' of null

Рейтинг: 0Ответов: 1Опубликовано: 14.11.2014

Имеется скрипт для скролла:

$(document).ready(function(){
  // сохраняем высоту шапки
  var headerHeight = $('.menu-wrap').height();

  // прокрутка при клике по пункту меню 
  $("a.menu-nav-link").click(function(e) {
    e.preventDefault();
    // вычисляем смещение от начала документа до нужного раздела
    var offsetTop = $("#"+$(this).data("target")).offset().top - headerHeight;
    // производим прокрутку
    $('html, body').animate({scrollTop: offsetTop}, 500);
  });
  // обработка скроллинга (изменение активного элемента меню)
  $(document).scroll(function(){
    var offsets = [];
    $('nav a').each(function(index, element){
      // собираем в массиве offsets смещения разделов относительно начала документа
      offsets.push($("#" + $(element).data('target')).offset().top);
    });
    // дополняем массив еще одним елементом- высота всего документа
    offsets.push($(document).height());
    // изменяем активный пункт как только область зашла за полэкрана: $(window).height() / 2
    var docScroll = $(document).scrollTop() + headerHeight + $(window).height() / 2;
    for (var i = 0; i < offsets.length - 1; i++) {
      if (docScroll >= offsets[i] && docScroll < offsets[i+1]) {
        $('.active').removeClass('active');
        $('nav a').eq(i).addClass('active');
        break;
      };
    };
  });
})

Если его подключаю, то в консоле хрома вылазят следующие ошибки:

Uncaught TypeError: Cannot read property 'top' of null | scrolling.js:18
(anonymous function) |  scrolling.js:18
e.extend.each  |  jquery.min.js:2
e.fn.e.each  |  jquery.min.js:2
(anonymous function)  |  scrolling.js:16
f.event.dispatch  |  jquery.min.js:3
h.handle.i   |  jquery.min.js:3

Подскажите, в чем может быть дело? В данной области не силён, рассчитываю на Вашу помощь. Спасибо.

Ответы

▲ 2
offsets.push($("#" + $(element).data('target')).offset().top);

$("#" + $(element).data('target')) - это пустой набор, т. е. элемента с каким-то id не существует. offset() возвращает null, у которого, естественно, нет свойства top.

Ставь точку останова и дебажь. Или даже порсто включи автоостановку на ошибках.