无法读取未定义的属性(定义时)

时间:2015-07-09 12:25:19

标签: javascript jquery twitter-bootstrap

我正在尝试在元素打开时滚动到元素的顶部(这是使用bootstrap 3手风琴结构),但是我得到一个错误,说'未捕获的TypeError:无法读取属性'top'of undefined'其中undefined是我想heading?我不确定为什么会发生这种情况,因为我在heading上执行的所有操作都会removeClass()工作。

$('.checkout .collapse').on('shown.bs.collapse', function() {
    var heading =
        $('.checkout')
        .find('a[aria-controls="' + $(this).attr('id') + '"]');

    heading.removeClass('complete')
        .css('cursor', 'default');

    $('html, body').animate({
        scrollTop: heading.offset().top - 100
    }, 'slow');
});

编辑:当添加$(html, body).ani ...时,标题似乎返回空对象,但是如果我删除该部分则返回预期的内容。

2 个答案:

答案 0 :(得分:2)

尝试使用jQuery的length属性进行检查以查看此类元素是否存在

if (heading.length) {
    $('html, body').animate({
        scrollTop: heading.offset().top - 100
    }, 'slow');
}

答案 1 :(得分:0)

您的代码中标题在animate方法中无法正常工作,因此您必须按照下面的说明进行替换

$('.checkout .collapse').on('shown.bs.collapse', function() {
var heading =
    $('.checkout')
    .find('a[aria-controls="' + $(this).attr('id') + '"]');

heading.removeClass('complete')
    .css('cursor', 'default');

$('html, body').animate({
    scrollTop: $('.checkout').find('a[aria-controls="' + $(this).attr('id') + '"]').offset().top - 100
}, 'slow');

});

希望这会对你有帮助.. !!!