jQuery TypeError .offset未定义

时间:2014-05-17 22:04:33

标签: jquery wordpress

现在已经尝试解决这个问题好几个小时了,只是想不通。

环境是WordPress我使用的是平滑滚动功能,当我选择一个页面上的链接到另一个页面上的某个位置时,它会平滑滚动。

我得到的错误是......

TypeError:$(...)。offset(...)未定义

令人讨厌的代码行是......

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

我的整个功能是

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);
 }
};

 });

我在这里疯了,代码工作正常,但它与WooCommerce产生冲突,我只是想不抛出错误。有人能告诉我为什么这会引起麻烦,抱歉新问题!

1 个答案:

答案 0 :(得分:1)

我可能已经发现了问题:

  • 脚本运行正常
  • 哈希是错误的!

您说您的网址字符串中有##位置。如果您使用:

window.location.hash

它不会返回任何东西。正确的哈希应该是#location,这与## location不同。

如果您对网址中的哈希进行硬编码,请重试,您会看到它有效。如果它不起作用,那么你就会有一些脚本在它之前起作用(但是如果你只是按照一个链接那么我就不这么认为了)

要试用,然后使用#top(或根据您的页面元素的任何内容)更改##位置