2017-01-26 5 views
0

Я искал сайт и нашел похожие вопросы, но ни одно решение не решило мою проблему. Когда я перейду к нему, я пытаюсь сделать div, установленный поверх экрана. Но я получаю сообщение об ошибке:Получение ошибки «Невозможно прочитать свойство« сверху »неопределенного»

"(индекс): 59 неперехваченным TypeError: Не удается прочитать свойство 'сверху' неопределенной в (индекс): 59"

 
 
    //store the element 
 
    var cache = '.faixatrabalho'; 
 
      console.log(cache); 
 
    
 
    //store the initial position of the element 
 
    var vTop = $(cache).offset().top - parseFloat($cache.css('margin-top').replace(/auto/, 0)); 
 
     $(window).scroll(function (event) { 
 
     // what the y position of the scroll is 
 
     var y = $(this).scrollTop(); 
 
    
 
     // whether that's below the form 
 
     if (y >= vTop) { 
 
      // if so, ad the fixed class 
 
      $(cache).addClass('stuck'); 
 
     } else { 
 
      // otherwise remove it 
 
      $cache.removeClass('stuck'); 
 
     } 
 
     }); 
 
    
 
     </script> 
 
.faixatrabalho { 
 
     padding-top: 20px; 
 
    \t width: 100vw; 
 
     position: static; 
 
     top: 0px; 
 
     }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="faixatrabalho"> 
 
     
 
     <div id="trabalhoback" data-scroll-speed="3"></div> 
 
     
 
    \t <div class="titulo">Nosso Trabalho</div> 
 
    \t <div class="texto1"> 
 
    \t \t <p > Exemple text</p> 
 
    \t </div> 
 
    </div>

I Я все еще изучаю jquery и не могу решить это.

+1

Вы пытаетесь получить доступ к DOM элемента до DOM готова? Здесь не так много контекста. –

+1

Посмотрите на [.ready()] (https://learn.jquery.com/using-jquery-core/document-ready/), второе примечание к вашему коду: 'var cache = '.faixatrabalho'; 'не сохраняет фактический элемент, а селектор. Если вы хотите кэшировать элемент, который вы можете сделать: 'var cache = $ ('. Faixatrabalho');' – empiric

+0

Возможный дубликат [Uncaught TypeError: Невозможно прочитать свойство «верх» неопределенного] (http://stackoverflow.com/ вопросы/20175094/uncaught-typeerror-can not-read-property-top-of-undefined) – Christoph

ответ

1

Ошибка означает, что $(cache).offset() возвращает undefined, что в терминах jQuery обычно означает, что $(cache) ничего не нашел.

Из макета вашего сценария кажется, что вы, скорее всего, выполняете этот код сразу, а элементы (ы), которые вы ищете, еще не существуют (поскольку документ по-прежнему загружается). Попробуйте выполнить его после полной загрузки документа. В JQuery вы можете сделать это путем оборачивания коды в самой функции JQuery, который по умолчанию устанавливает его в качестве обработчика для ready события документа:

$(function() { 
    var cache = '.faixatrabalho'; 
    console.log(cache); 

    //store the initial position of the element 
    var vTop = $(cache).offset().top - parseFloat($cache.css('margin-top').replace(/auto/, 0)); 
}); 
+1

хорошо. Но другие моменты: $ cache.css -> $ (cache) .css plus $ cache.removeClass -> $ (cache) .removeClass – gaetanoM

Смежные вопросы