как исправить document.body с нулевой ошибкой

У меня есть ошибка document.body is null в моем javascript, потому что я использую:

$(window).width()

как значение для присвоения переменной в моем

$(document).ready(function(){});

Буду очень признателен всем, кто поможет мне в этом.

С уважением

edit: извините, если все это было неясно. У меня есть демо по адресу: http://www.wpmonk.com/demo/hypowired по адресу сначала тема загрузится, но затем станет белой (из-за ошибки), но при перезагрузке вы можете увидеть всю тему, потому что тогда он знает значение для $(window).width()

Я использую этот код для центрирования макета (это невозможно с css, потому что слева также должна быть ширина).

function positioneerElement(){      
    $breedte = (document.body.clientWidth - 1124) / 2;
    $('#bg_left').css({
        'width': $breedte
    });
    $('.container').css({
        'margin-left': $breedte
    });
}

Я вызываю функцию positioneerElement() в функции загрузки.

Извините, если это было неясно, хотя мне не нужно было размещать здесь демо для этого или код. Однако я хотел бы поблагодарить людей, которые пытаются помочь!


person Community    schedule 21.10.2009    source источник
comment
Пожалуйста, опубликуйте минимальный тестовый пример: достаточно кода для завершения и выдачи ошибки, но не более того.   -  person outis    schedule 22.10.2009
comment
Почему бы вам, люди, не научиться голосовать против таких вопросов?! Наведите указатель мыши на стрелку вниз, прочитайте всплывающую подсказку и делайте свою чертову работу.   -  person Josh Stodola    schedule 22.10.2009
comment
@Josh: Наверное, немного резко, я думаю. Я подумал, мы могли бы сначала запросить дополнительную информацию? Айртон, вероятно, искренне считал, что дополнительной информации не требуется; надеюсь, он обновит вопрос. Но при отрицательном голосовании менее вероятно, что люди попытаются помочь, и менее вероятно, что он получит ответ. Я думал, что сообщество SO здесь, чтобы помогать людям, а не ругать и наказывать их за недопонимание...   -  person Damovisa    schedule 22.10.2009
comment
Да ладно, @Damovisa, ты же знаешь, все дело в репутации ;) Проголосовали за исправление.   -  person Justin Johnson    schedule 22.10.2009
comment
@Justin - О, чувак, ты прав. Извините, о чем я думал? :)   -  person Damovisa    schedule 22.10.2009


Ответы (4)


Я согласен с outis — нам нужно больше кода.

Это сказало:

  • Вы уверены, что выполняете всю свою работу внутри функции $(document).ready?
  • У вас точно есть правильно сформированный (и закрытый) тег body и корректный xhtml?
  • Это происходит во всех браузерах?

Одно предложение:

Проблема сохраняется, если вы поместите функцию positioneerElement в функцию $(document).ready? Мне интересно, оценивает ли браузер document.body до загрузки документа.

$(document).ready(function() {
    function positioneerElement(){      
    $breedte = (document.body.clientWidth - 1124) / 2;
    $('#bg_left').css({
        'width': $breedte
    });
    $('.container').css({
        'margin-left': $breedte
    });

    // your other code, including
    positioneerElement();
});
person Damovisa    schedule 21.10.2009
comment
Я добавил дополнительную информацию, я делаю все это в готовых функциях, да, мой код должен быть действительным xhtml, и это происходит в каждом браузере. - person ; 22.10.2009
comment
большое тебе спасибо. Видимо, все это было связано с этим. Мне это показалось странным, потому что в других проектах мне не нужно было помещать функции в мой document.ready. Ваше здоровье - person ; 23.10.2009

Убедитесь, что вы вызываете $(window).width() только после включения тега <body> (например, в обратный вызов готовности) и/или используете объявление типа документа в стандартном режиме. Вы должны сделать это в любом случае: Quirks Mode отстой.

Проблема в том, что для чтения размера области просмотра в Quirks Mode jQuery должен смотреть на document.body.clientWidth вместо document.documentElement.clientWidth. Если вы еще не запустили свой <body>, узел document.body отсутствует.

person bobince    schedule 21.10.2009

Вы должны включить jquery.js, а не jquery.min.js Похоже, в нем какая-то ошибка Это работает для меня

person mpeti    schedule 20.11.2009

Ну, просто исходя из информации, которую вы мне дали, может быть, что тело еще не загрузилось должным образом. Дополнительные сведения см. здесь: http://www.coderanch.com/t/122834/HTML-JavaScript/document-body-null-or-not#606782

Я бы сказал больше, но я тоже согласен с outis, что вам нужно опубликовать еще немного кода для отладки.

person Robert Massaioli    schedule 21.10.2009