2014-05-17 8 views
2

은 여러 시간 동안이 문제를 해결하기 위해 노력해 왔으며 지금은 파악할 수 없습니다.jQuery TypeError .offset이 정의되지 않았습니다.

환경은 WordPress입니다. 한 페이지에서 다른 페이지의 위치로 링크를 선택할 때 스크롤을 부드럽게하는 부드러운 스크롤 기능을 사용하고 있습니다. 나는 점점 오전 오류가

...

형식 오류 :. $ (...) 오프셋 (...)는 정의되지

코드의 잘못된 줄은 ...

jQuery(document).ready(function($) { 

var headerHeight = $('#header-wrap').height(); //When the header position is fixed 

$('a').click(function(){ 
    var hashEle = $(this).attr('href').split('#'); 
    if (hashEle.length > 1) { 
     if (hashEle[1] == 'top') { 
      $('body, html').animate({ 
       scrollTop: 0 
      },800); 
     } else { 
     jQuery('body, html').animate({ 
      scrollTop: $('#'+ hashEle[1]).offset().top - headerHeight 
     },800); 
     } 
    }; 
}) 
// find element from url 
hashname = window.location.hash.replace('#', ''); 
elem = $('#' + hashname); 
if(hashname.length > 1) { 
    if(hashname == 'top') { 
    $('body, html').animate({ 
      scrollTop: 0 
     },500); 
    } else { 
    $('body, html').animate({ 
      scrollTop: $(elem).offset().top - headerHeight 
     },800); 
} 
}; 

}); 

내가 여기 미친려고하고

scrollTop: $(elem).offset().top - headerHeight 

내 전체 기능이되고, 코드는 잘 작동하지만 우와와의 충돌을 만드는 oCommerce와 나는 오류가 발생하지 않도록하고 싶습니다. 누군가가 왜 이것이 문제를 일으키는 지 알 수 있습니까, 신비 질문에 대해 유감스럽게 생각합니다!

+0

먼저 JQuery를 페이지에 포함 시켰습니까? ... elem이 실제로 존재하는지 디버그하려고합니다. console.log (elem)에 시도해보고 요소가 정의되어 있는지 확인하십시오. 여기에 결과를 게시하십시오 :) –

+0

예 jQuery는 functions.php를 통해 맨 위에 포함되어 있습니다. 크롬 콘솔에 .log (elem)을 입력하면 SyntaxError : Unexpected token ...이 표시됩니다. 하지만 지금은 내가 var에서 elem = $ ('#'+ hashname)의 infront를 남겨 두었 기 때문에 그것을 볼 수있다. jquery와 javascript를 처음 사용함. :) – phlipinmi

+0

안녕, 그건 문제가 안된다, 그것은 단지 현재의 범위로 변수를 유지하는 것입니다. 문제는 hashname 값에 JQuery 쿼리 선택기와 함께 사용할 수없는 토큰이 있다는 것입니다. console.log (hashname)가 반환하는 내용을 여기에 적어주십시오. 그러면 우리가 알아낼 것입니다. –

답변

1

가 나는 문제를 발견 할 수 있습니다 :

  • 스크립트는 잘 작동
  • 해시 잘못입니다!

귀하의 URL 문자열에 ## 위치가 있다고하셨습니다. 사용하는 경우 :

window.location.hash 

아무 것도 반환하지 않습니다. 올바른 해시는 ## 위치와 다른 #location이어야합니다.

URL에 해시를 하드 코드 한 다음 다시 시도하면 작동하는 것으로 나타납니다. 그것이 작동하지 않으면, 당신은 그 전에 어떤 스크립트가 행동을 일으킨다. (하지만 나는 단지 링크를 따라 가면 worng이 될 것이라고 생각하지 않는다.)

## 위치가 #top (또는 페이지 요소에 따라 임의의 것)

+1

그렇습니다. 오타였습니다. (내 jQuery의 배치와 관련이 있었고 아마도 1.11 이었기 때문에 머리로 옮기고 1.10.2를로드하고 완벽하게 작동합니다. 더 많은 연구를해야합니다. 더 나은 답변을 얻으려면이 두 가지 모두에게 감사해야합니다. 커뮤니티와 함께 ​​이런 문제를 해결하는 것을 좋아합니다. – phlipinmi

관련 문제