JQuery $(document).ready() не работает в IE6

У меня есть следующий код:

// Creates a timer to check for elements popping into the dom            
timer = setInterval(function ()
{          
    for (p in pixelTypes)
    {                             
        checkElems(pixelTypes[p]);
    }                            
}, 10);

// Add Document finished callback.
$(document).ready(function ()
{         
    // Document is loaded, so stop trying to find new pixels
    clearInterval(timer); 
});       

В Firefox он отлично работает, но в IE6 я получаю сообщение об ошибке "Object Expected" в строке $(document).ready.

Я не могу понять, что может заставить IE6 не распознать его, jquery полностью загружен этой точкой.

Это известная проблема?

Ответ 1

Просто несколько указателей для всех, кто интересуется:

$(document).ready(function() {...}); и $(function() {...}); означает одно и то же. Последнее является сокращением для первого.

Если вы разрабатываете для большого сайта, используя несколько библиотек Javascript или разрабатываете плагины, предназначенные для совместимости с другими людьми, вы не можете доверять знаку доллара ($), который должен быть связан с объектом jQuery. Используйте следующие обозначения, чтобы быть в безопасности:

(function($) { [your code here] })(jQuery);

Это передает jQuery в самостоятельную исполняемую функцию и связывает $с объектом jQuery внутри этой функции. Тогда не имеет значения, что $представляет вне вашей функции.

Чтобы вернуться к вашему вопросу, вы проверили, назначена ли переменная таймера при получении ошибки? Я полагаю, что браузер увидит $(document).ready(function() {...}); все как одну строку, поэтому, если у вас есть какой-то отладчик, который говорит вам, что строка нарушения, это может быть переменная таймера...

Последняя вещь: в Javascript неверно размещать открытые фигурные скобки на новой строке. Это может привести к очень плохим ошибкам из-за возможности вставки с запятой Javascript. Для получения дополнительной информации прочитайте Douglas Crockford Javascript: Хорошие детали:

http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=sr_1_1?ie=UTF8& s = книги & QID = 1267108736 & ср = 1-1

Во всяком случае, на самом деле надеюсь, что я никого не расстроил. Надеюсь, вы решите проблему!

EDIT: Я не уверен, что это означает, что роберц имел в виду полностью квалифицированный, но, насколько я знаю, когда URL-адрес полностью квалифицирован, это означает, что части отсутствуют, т.е. это абсолютный URL-адрес, начинающийся с http://или https://(или другого протокола). Пожалуйста, поправьте меня, если я ошибаюсь!

Ответ 2

У меня была такая же проблема и в прошлом. Это был спорадический вопрос, который был ужасен и воспроизводился.

Решение, которое я нашел, заключалось в замене $(document).ready(function() {...}); на jQuery(function() {...}), и он работал как шарм!

Перемещение $(document).ready(function() {...}); на дно не работало для моего использования.

Комментарии в этот пост невероятно полезны (где я впервые прочитал об этом так)

Ответ 3

Если у кого-то есть такая же проблема, вы должны увидеть, если при вызове ваших javascripts у вас есть type="application/javascript", я удаляю его, и он был исправлен, я думаю, что это проблема с IE и типом Thing

Ответ 4

Вы уверены, что загружен jQuery? Попробуйте отладить с помощью таких предупреждений, как:

alert(typeof $);

Вы также можете попробовать другой синтаксис:

$(function() {
     clearInterval(timer); 
});

Хорошо, поэтому из вашего комментария, приведенное выше не помогает. Ошибка "ожидаемого объекта", по-видимому, возникает с синтаксической ошибкой в ​​моем опыте. Это точный код, который у вас есть? Если нет, можете ли вы опубликовать его?

Ответ 5

Если он находится в элементе script, который находится внутри вашего элемента body (т.е.)..

Причиной может быть атрибут, который вы передаете с помощью script -tag. Если это:

<script type="text/javascript">...</script>

IE6 может дать ошибку. Вы должны использовать

<script language="javascript">...</script> 

Затем ошибка исчезает.

Ответ 6

Убедитесь, что ваш script тип text/javascript

<script type='text/javascript'

Ответ 7

Сборщик DateTime отлично справился с моим локальным тестом XP, но он не смог выполнить "Объект, ожидаемый" после развертывания на сервере. После двух дней упорства я решил свою проблему, добавив Url.Content по пути Javascript!

<script src="<%= Url.Content("~/Scripts/jquery-1.4.1.min.js") %>" type="text/javascript"></script>

<script src="<%= Url.Content("~/Scripts/ui/minified/jquery.ui.core.min.js") %>" type="text/javascript"></script>  
<script src="<%= Url.Content("~/Scripts/ui/minified/jquery.ui.datepicker.min.js") %>" type="text/javascript"></script>

Ответ 8

Я не думаю, что вы должны действительно опросить элементы так, как вы.

Событие готовности документа сразу же, как только браузер загрузил достаточно, чтобы вы могли манипулировать страницей, так что вам нужно просто выполнить обработку DOM в блоке $(document).ready().

Ответ 9

Вы можете попробовать использовать старый способ для проверки того, готов ли документ к работе... Поместите script непосредственно перед закрытием </body> tag - я считаю, что он имеет тот же эффект, что и событие jQuery "ready" - на самом деле, скорее всего, это происходит быстрее.


По моему опыту ошибка "Ожидание объекта" в IE6 появляется из-за синтаксической ошибки - стоит положить script, хотя JSlint, если вы еще этого не сделали...

Ответ 10

Я столкнулся с этой проблемой на своей машине, так как смог быстро найти решение. Вот что я сделал:

1.Покусил мой javascript с предложением nickf "alert (typeof $)" и получил предупреждающее сообщение "undefined"

2.I затем полностью квалифицировал ресурсы jQuery script.

3. Загрузите мою страницу и получите сообщение с сообщением "функция"

Кстати, я использую IIS 5.1 на XP. Мой веб-сайт настроен на использование "Подстановочного картографирования", чтобы получить поддержку инфраструктуры asp.net mvc. Я думаю, что эта конфигурация вызвала неработающие ссылки.

Для получения дополнительной информации о том, как настроить MVC на старых версиях IIS, посмотрите сообщение Phil Haack: http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

Ответ 11

$(document).ready() сообщает вам, когда dom готов, но не все активы обязательно входят.

Если вы хотите убедиться, что все активы действительно загружены, используйте $(window).load(). Наиболее частое использование этого заключается в том, чтобы сделать загрузку изображений, но она может работать и для вашей проблемы script.

Ответ 12

У меня была такая же проблема, script ошибка сообщила мне, что объект был undefined. Я пробовал все перечисленные здесь предложения безрезультатно. Единственное, что я не рассматривал, это безопасность, я забыл все об аутентификации своих форм и выяснил, что я забыл про авторизацию в папке скриптов, которая запрещала доступ к библиотекам jQuery!!!

Надеюсь, что это поможет.