offset()。top在IE7中给出错误:offset()。top为null或不是对象

时间:2011-11-29 00:46:43

标签: javascript jquery internet-explorer-7 scrollto scrolltop

我使用下面一段代码在向下滚动时使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));

但它没有做到这一点。谢谢你的帮助!

2 个答案:

答案 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存在的特定页面上执行,错误消失了!