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

时间:2015-09-15 18:29:31

标签: jquery

我收到此错误

  

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

箭头指向$。

我查看了在标题中输入此错误时弹出的问题,但我没有得到解决方案。

这是我的jquery

$(document).ready(function () {
if(window.location.href.indexOf("#") > -1)
{
    var pieces = window.location.href.split(/[\s_]+/);
    var section = pieces[pieces.length-1];
    var element_to_scroll_to = $('#' + section);
    var navbar_height = parseInt($('.navbar').css('height').replace('px', ''));
    animate_scroll(element_to_scroll_to, navbar_height, 25);
}
});

function animate_scroll (element, variable, offset) {
    $('html, body').stop().animate({
        scrollTop: $(element).offset().top - variable - offset

    }, 600);

}

这是我的js文件的顺序

{{ HTML::script('js/jquery-1.10.2.js') }}
{{ HTML::script('js/jquery-ui.js') }}
{{ HTML::script('js/bootstrap.min.js') }}
{{ HTML::script('js/wow.min.js') }}
{{ HTML::script('js/jquery.superslides.min.js') }}
{{ HTML::script('js/slick.min.js') }}
{{ HTML::script('js/modernizr.custom.js') }}
{{ HTML::script('js/classie.js') }}
{{ HTML::script('js/elastic_grid.min.js') }}
{{ HTML::script('js/webkrunch_portfolio.js') }}
{{ HTML::script('js/main.js') }}

2 个答案:

答案 0 :(得分:1)

所以,很容易打破这里发生的事情。

您正在使用名为animate_scroll的该功能,并将参数element称为element_to_scroll_to

考虑到这一点,element_to_scroll_to已经通过以下方式调用jQuery

$('#' + section);

所以当调用animate_scroll()时,它会看到:

$('html, body').stop().animate({
    scrollTop: $($('#' + section)).offset().top - variable - offset
}, 600);
// Notice the dual call of jQuery

您应该只需致电element,而不是再次重新定义jQuery,如下所示:

$('html, body').stop().animate({
    scrollTop: element.offset().top - variable - offset
}, 600);

编辑:

因此,如果您仍然遇到错误,问题还有待解决。以下是我将采取的步骤来确定问题。

if(window.location.href.indexOf("#") > -1) // Perhaps this is not returning > -1
{
    var pieces = window.location.href.split(/[\s_]+/); // Perhaps this is not creating an array to pull from
    var section = pieces[pieces.length-1]; // Perhaps the last element doesn't exist in the first place based on the above tests
    var element_to_scroll_to = $('#' + section);
    var navbar_height = parseInt($('.navbar').css('height').replace('px', ''));
    animate_scroll(element_to_scroll_to, navbar_height, 25);

    console.log(pieces);
    console.log(section);
    console.log(element_to_scroll_to);
}

}

为了测试上述内容,我将运行简单的控制台测试,例如:

console.log(pieces);
console.log(section);
console.log(element_to_scroll_to);

if语句末尾添加控制台后查看控制台,它应该进一步说明哪个部分未定义。

答案 1 :(得分:0)

我认为你应该对元素滚动进行测试。

您的代码变得像

$(document).ready(function () {
if(window.location.href.indexOf("#") > -1)
{
    var pieces = window.location.href.split(/[\s_]+/);
    var section = pieces[pieces.length-1];
    var element_to_scroll_to = $('#' + section);
    if(element_to_scroll_to.length) {
    var navbar_height =      
    parseInt($('.navbar').css('height').replace('px', ''));
    animate_scroll(element_to_scroll_to, navbar_height, 25);
    }
}
});

function animate_scroll (element, variable, offset) {
    $('html, body').stop().animate({
        scrollTop: $(element).offset().top - variable - offset

    }, 600);

}