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オブジェクトはJavaScriptコードのどこからでもアクセスできるため、オブジェクトのメンバーと同じ名前の変数を使用しないでください(ただし、オブジェクトのメンバーと同じ名前のwindow変数を宣言した場合、windowオブジェクトのメンバーはwindow残ります)windowオブジェクトからアクセス可能)。

その要点は、変数名を上から別の名前に変更した場合、問題は解決したということです。

于 2012-01-10T14:57:13.650 に答える
0

問題を理解した。

このJavaScriptはすべてのページの先頭に読み込まれましたが、div'#comment'が存在するのは1ページだけです。どういうわけか、最近のブラウザではこれはエラーになりませんが、IE7はそれを処理するのに問題があります。ここで、このコードを#commentが存在し、エラーがなくなった特定のページでのみ実行するようにしました。

于 2011-11-29T10:42:27.087 に答える