Frage

Ich benutze das folgende Code, um die Position eines Divs zu beheben, wenn ich nach unten gescrollt wird (damit er im Fenster bleibt). Es funktioniert vollkommen in Ordnung, aber in IE7 bekomme ich den Fehler: 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');
        }
     });
   }
});

Googeln Ich habe das gefunden (siehe unterer Post von Earl Jenkins) http://api.jquery.com/offset/In dem er diesen speziellen Fehler löst. Aber JQuery & JavaScript -Anfänger, ich weiß nicht, wie ich diese Korrektur implementieren soll, denn in seinem Beitrag verwendet er einen festen Wert (100), und im obigen Code nicht.

Ich habe versucht, dies zu beheben:

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

Aber es tut nicht den Trick. Danke für Ihre Hilfe!

War es hilfreich?

Lösung

Ich denke, dass das Problem, auf das Sie geraten sind top Eigentum des window Objekt, wenn Ihr #comment Div war nicht vorhanden.

Dieses Problem ist nicht gut dokumentiert, aber ich bin schon einmal darauf getroffen. Ich fand eine vage Erklärung der Ursache bei Dottoro.com Verweis auf das Fensterobjekt.

Das window Objekt ist von überall im JavaScript -Code von überall zugänglich. Verwenden Sie daher keine Variablen mit den gleichen Namen wie die Mitglieder der window Objekt (wenn Sie eine Variable mit demselben Namen wie jedes Mitglied der deklarieren window Objekt das Mitglied der window Objekt bleibt über die zugänglich window Objekt).

Das Kern ist, dass, wenn Sie Ihren variablen Namen von oben in etwas anderes geändert hätten, das Problem verschwunden wäre.

Andere Tipps

Das Problem herausgefunden.

Dieses JavaScript wurde im Kopf jeder Seite geladen, aber auf einer Seite existiert das Div '#Coment'. Irgendwie macht dies im modernen Browser keinen Fehler, aber IE7 hat Probleme mit dem Umgang mit ihm. Jetzt lasse ich dieses Stück Code nur auf dieser bestimmten Seite ausgeführt, auf der #Coment existierte und der Fehler weg ist!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top