1

我使用以下代码在向下滚动时固定 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 和 javascript 初学者,我不知道如何实现这个修复,因为在他的帖子中他使用了一个固定值(100),而在上面的代码中却没有。

我试图通过这样做来修复:

var fix = $('#comment').offset();
var top = fix.top - parseFloat($('#comment').css('margin-top').replace(/auto/, 0));

但这并不能解决问题。谢谢你的帮助!

4

2 回答 2

1

我认为您遇到的问题是当您的DIV 不存在时您正在访问对象的top属性。window#comment

这个问题没有很好的记录,但我之前遇到过。我在Dottoro.com 对 window object 的引用中找到了对原因的模糊解释。

可以从 JavaScript 代码中的任何位置访问该window对象,因此不要使用与window对象成员同名的变量(尽管如果您声明一个与对象的任何成员同名的变量,则该window对象的成员将window保持不变)可通过window对象访问)。

它的要点是,如果您将变量名从顶部更改为其他名称,问题就会消失。

于 2012-01-10T14:57:13.650 回答
0

想通了问题。

这个 javascript 被加载到每个页面的头部,但只有一个页面上存在 div '#comment'。不知何故,在现代浏览器中这不会给出错误,但 IE7 处理它有问题。现在我让这段代码只在存在#comment 并且错误消失的特定页面上执行!

于 2011-11-29T10:42:27.087 回答