offset (). top выдает ошибку в IE7: offset (). top равен нулю или не является объектом - PullRequest
1 голос
/ 29 ноября 2011

Я использую следующий фрагмент кода, чтобы зафиксировать позицию 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');
        }
     });
   }
});

Поиск в Google Я нашел это (см. Нижний пост Эрла Дженкинса) http://api.jquery.com/offset/ В котором он решает эту конкретную ошибку,Но, как я начинающий jQuery и javascript, я не знаю, как реализовать это исправление, потому что в своем посте он использует фиксированное значение (100), а в приведенном выше фрагменте кода - нет.

Я пытался исправить, выполнив это:

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

Но это не сработало.Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 10 января 2012

Я думаю, что проблема, с которой вы столкнулись, заключалась в том, что вы обращались к свойству top объекта window, когда ваш #comment DIV отсутствовал.

Эта проблема плохо документирована, но я сталкивался с ней раньше. Я нашел неясное объяснение причины на ссылке Dottoro.com на объект окна .

Объект window доступен из любого места в коде JavaScript, поэтому не используйте переменные с теми же именами, что и члены объекта window (хотя, если вы объявляете переменную с тем же именем, что и любой член объект window, член объекта window остается доступным через объект window).

Суть в том, что если бы вы изменили имя переменной с top на что-то другое, проблема исчезла бы.

0 голосов
/ 29 ноября 2011

Разобрался с проблемой.

Этот javascript был загружен в заголовок каждой страницы, но только на одной странице есть div "#comment". Как-то в современном браузере это не выдает ошибку, но IE7 имеет проблемы с этим. Теперь я позволю выполнить этот фрагмент кода только на той конкретной странице, где существует #comment и ошибка исчезла!

...