2015-10-23 7 views
-1

К сожалению, я купил шаблон Wordpress без поддержки, и теперь я пытаюсь отлаживать его сам.Uncaught TypeError на тему Wordpress

Одной из ошибок, которые я не могу решить, является рекурсивная ошибка консоли JQuery. В частности, он срабатывает всякий раз, когда я прокручиваю с помощью мыши.

Uncaught TypeError: Cannot read property 'top' of undefined

Javascript код ошибки следующие:

jQuery(window).scroll(function(){ 
     var windowPos = jQuery(window).scrollTop(); // get the offset of the window from the top of page 
     var windowHeight = jQuery(window).height(); // get the height of the window 
     var docHeight = jQuery(document).height(); 

     for (var i=0; i < aArray.length; i++) { 

      if(aArray[i].indexOf("#") != -1) { 

       var theID = aArray[i].substr(aArray[i].indexOf("#")); 
       if (theID.length) { 
        var divPos = jQuery(theID).offset().top; // HERE IS THE ERROR, get the offset of the div from the top of page 
        var divHeight = jQuery(theID).height(); // get the height of the div in question 
        if (windowPos >= divPos && windowPos < (divPos + divHeight)) { 
         if(jQuery("a[href='" + theID + "']").length) { 
          jQuery("a[href='" + theID + "']").addClass("nav-active"); 
         } 
         else if(jQuery("a[href='" + aArray[i] + "']").length) { 
          jQuery("a[href='" + aArray[i] + "']").addClass("nav-active"); 
         } 
        } else { 
         if(jQuery("a[href='" + theID + "']").length) { 
          jQuery("a[href='" + theID + "']").removeClass("nav-active"); 
         } 
         else if(jQuery("a[href='" + aArray[i] + "']").length) { 
          jQuery("a[href='" + aArray[i] + "']").removeClass("nav-active"); 
         } 
        } 
       } 
      } 
     } 

     if(windowPos + windowHeight == docHeight) { 
      if (!jQuery("nav li:last-child a").hasClass("nav-active")) { 
       var navActiveCurrent = $(".nav-active").attr("href"); 
       jQuery("a[href='" + navActiveCurrent + "']").removeClass("nav-active"); 
       jQuery("nav li:last-child a").addClass("nav-active"); 
      } 
     } 
    }); 

Пожары ошибок на линии var divPos = jQuery(theID).offset().top;. Я добавил вручную if statement, чтобы проверить, есть ли переменная theID, а затем выполнить код, но все же ошибка запускается на консоли браузера.

+0

можете ли вы 'console.log (theID)' быстро взглянуть на то, что это такое? – user3154108

+0

Это был якорь элементов меню. Однако решение vlarsson заставило ошибку остановиться. Вероятно, мой 'if statement' был недостаточным. – Tasos

ответ

0

Если сценарий не может найти объект в DOM, он сломается. Попробуйте проверить, существует ли она или нет.

if (theID.length) { 
     // Check if you find the object in the DOM 
     if(jQuery(theID).length > 0) { 
        var divPos = jQuery(theID).offset().top; // HERE IS THE ERROR, get the offset of the div from the top of page 
        var divHeight = jQuery(theID).height(); // get the height of the div in question 
        if (windowPos >= divPos && windowPos < (divPos + divHeight)) { 
         if(jQuery("a[href='" + theID + "']").length) { 
          jQuery("a[href='" + theID + "']").addClass("nav-active"); 
         } 
         else if(jQuery("a[href='" + aArray[i] + "']").length) { 
          jQuery("a[href='" + aArray[i] + "']").addClass("nav-active"); 
         } 
        } else { 
         if(jQuery("a[href='" + theID + "']").length) { 
          jQuery("a[href='" + theID + "']").removeClass("nav-active"); 
         } 
         else if(jQuery("a[href='" + aArray[i] + "']").length) { 
          jQuery("a[href='" + aArray[i] + "']").removeClass("nav-active"); 
         } 
        } 
       } 
      } 
+0

Не первый ли оператор 'if', который я добавил, делает то же, что и у вас? – Tasos

+0

Он проверяет, установлена ​​ли строка ID. Если он не может найти jQuery (ID); offset() не будет работать. Поэтому вы можете удалить это и использовать мой чек :) –