我使用下面一段代码在向下滚动时使div的位置固定(因此它将保留在窗口中)。它工作得很好,但在IE7中我收到错误:offset().top is null or not an object.
$(document).ready(function(){
var msie6 = $.browser == 'msie' && $.browser.version < 7;
if (!msie6) {
var top = $('#comment').offset().top - parseFloat($('#comment').css('margin-top').replace(/auto/, 0));
$(window).scroll(function (event) {
// what the y position of the scroll is
var y = $(this).scrollTop();
// whether that's below the form
if (y >= top) {
// if so, ad the fixed class
$('#comment').addClass('fixed');
} else {
// otherwise remove it
$('#comment').removeClass('fixed');
}
});
}
});
谷歌搜索我发现了这一点(见Earl Jenkins的帖子)http://api.jquery.com/offset/ 他解决了这个特殊的错误。但是,jQuery&amp;像我一样javascript初学者,我不知道如何实现此修复,因为在他的帖子中他使用固定值(100),并且在上面的代码片段中它没有。
我尝试通过这样做来解决问题:
var fix = $('#comment').offset();
var top = fix.top - parseFloat($('#comment').css('margin-top').replace(/auto/, 0));
但它没有做到这一点。谢谢你的帮助!
答案 0 :(得分:1)
我认为您遇到的问题是,当top
DIV不存在时,您正在访问window
对象的#comment
属性。
这个问题没有很好的记录,但我之前遇到过这个问题。我在Dottoro.com's reference to the window object找到了对原因的含糊解释。
可以从JavaScript代码的任何位置访问
window
对象,因此不要使用与window
对象的成员具有相同名称的变量(尽管如果声明具有相同名称的变量)作为window
对象的任何成员,window
对象的成员可以通过window
对象访问。
它的要点是,如果您将变量名称从顶部更改为其他内容,则问题就会消失。
答案 1 :(得分:0)
找出问题所在。
这个javascript被加载到每个页面的头部,但只有一页div'#comment'存在。不知何故,在现代浏览器中,这不会产生错误,但是IE7在处理它时遇到了麻烦。现在我让这段代码只在#comment存在的特定页面上执行,错误消失了!