我有一个滚动到列表中锚点位置的函数
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的范围。
答案 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);