Периодическая ошибка выполнения в IE7:Произошло в строке 0. Требуется объект?Хм?

StackOverflow https://stackoverflow.com/questions/1442441

Вопрос

Сайт, над которым я работаю, периодически отображает ошибку времени выполнения, но только в IE7 и 8.Эта ошибка будет появляться почти случайно (например, она может появиться при начальной загрузке страницы один раз или не появиться до загрузки n-й страницы).В ошибке говорится, что это произошло в строке: 0, и ошибка «Требуется объект».Я использую jQuery по всему сайту, но отключаю его по частям (т.различные плагины и еще много чего) не решили проблему.Я все еще работаю над этим, но хочу выложить эту «Help!» на stackoverflow на случай, если кто-то имел дело с чем-то подобным раньше.

Именно от этой прерывистости у меня действительно трескается задница.

Это было полезно?

Решение

Судя по вашему ответу, я предполагаю, что элемент с идентификатором «header-section» находится в верхней части страницы, и иногда правило CSS применяется до загрузки остальной части страницы.Это означает, что выражение пытается оценить offsetHeight элемента «content-section» до того, как этот элемент существует.

У меня есть пара предложений, как с этим справиться, но вам придется их попробовать, чтобы оценить их полезность.

1/ Вместо того, чтобы создавать правило, основанное на идентификаторе «раздела заголовка», создайте его на основе «раздела заголовка» класса.Не добавляйте этот класс в разметку, а добавляйте его по завершении загрузки документа, через jquery - оставьте id элемента как есть...

$(document).ready(function(){
  $("#header-section").addClass("header-section");
});

2/ Сделайте правило более терпимым к тому, чтобы «раздел контента» не был найден - не уверен, как часто оценивается выражение, поскольку я никогда не чувствовал необходимости использовать выражение в правилах CSS, поэтому это может не сработать.

#header-section {margin-top: expression((0 - (this.offsetHeight + (document.getElementById("content-section") ? document.getElementById("content-section").offsetHeight : 0))) + "px");}

Дай мне знать, как твои дела.

P.S.Я понятия не имею, чего пытается добиться это правило. Я смоделировал страницу с тем же макетом, как я предполагаю, и все, что она делает, это перемещает большую часть контента с верхней части страницы таким образом, чтобы предотвратить его никогда не видели.

Другие советы

Похоже, ваш скрипт пытается получить доступ к объекту до того, как DOM будет полностью создан. Вы убедились, что ваша функция находится внутри функции готовности jQuery?

   $(document).ready(function() {
          // put all your jQuery goodness in here.

   });

Я понял это. В CSS-файле только для IE используются два выражения. Вот, например, один:

#header-section {margin-top: expression((0 - (this.offsetHeight + document.getElementById("content-section").offsetHeight)) + "px");}

Комментирование обоих экземпляров, использующих эти выражения, решает проблему. Не уверен, почему это происходит именно так (и я не написал CSS, который делает это, поэтому я даже не думал даже заглядывать в этот файл CSS).

Это не может быть конфликт с другим JS, потому что было по крайней мере 2 места, где он использовался, когда никакой другой JS не загружался вообще, но ошибка все же произошла. Возможно, идентификаторы (раздел содержимого или раздел заголовка) не могут быть найдены по какой-либо причине? Не совсем уверен ... тем более что поведение было таким непоследовательным. Хммм ...

Спасибо за решение, белугабоб

Я столкнулся с той же ошибкой, когда в строке 0 требуется объект. Ваше исправление с выражением ...? ...: 0 в CSS для таблицы стилей ie сработало.

Причина, по которой этот вид кода используется для перемещения навигации / заголовков, связана с SEO. Вы хотите, чтобы ваш контент был сверху, а менее важная мудрая навигация под ним -

.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top