JavaScript - 无法读取null的属性“top”

时间:2011-10-28 18:56:59

标签: javascript nullpointerexception

我有一个滚动到列表中锚点位置的函数

   function snapToAnchor(anchor) {
    $('#divProductScroll').scrollTop(0);
    var offset = $(anchor).offset().top - $('#divProductScroll').offset().top;
    $('#divProductScroll').scrollTop(offset);
    //$('#divProductScroll').animate({ scrollTop: offset }, 250);
}

但这有时会给我错误

无法读取null的属性'top'

我对JavaScript不太好

任何人都可以帮忙解决这个问题吗?

我找到了问题。

<小时/>  这个snapToAnchor函数是在一个对话框模型中,所以第二次当我点击这个函数时,没有生成列表,这就是为什么我有空值,所以我做的是在激活这个函数之前,我重新创建模态,然后进入函数,现在没有null的范围。

3 个答案:

答案 0 :(得分:2)

锚变量不包含您站点的有效选择器。在此处调用offset将返回null

示例

var a = $('#non-existing-id'); //returns empty object
var b = a.offset(); // returns null
b.top; //throws a TypeError exception

您可以通过在第3行插入alert(anchor)来简单地调试程序。这将显示变量的内容。

答案 1 :(得分:1)

如果 anchor 具有DOM元素的id - 那么正确的方式将它与jQuery一起使用:

$('#' + anchor).offset()

否则你会得到一个null(和错误)。

答案 2 :(得分:0)

$(anchor).offset().top

通常会输出一个不是数字的字符串...类似于100px。 你需要从字符串中提取数字。

var topoffset = $(anchor).offset().top;
topoffset = topoffset.split('px', 1);