Ошибка jQuery $ (document) .ready () в IE6 - PullRequest
10 голосов
/ 21 января 2009

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

// 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 я получаю ошибку «Ожидаемый объект» в строке $ (document) .ready.

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

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

Ответы [ 12 ]

15 голосов
/ 25 февраля 2010

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

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

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

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

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

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

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

http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=sr_1_1?ie=UTF8&s=books&qid=1267108736&sr=1-1

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

РЕДАКТИРОВАТЬ: Я не уверен, что это то, что Робертц имел в виду полностью квалифицированным, но, насколько я знаю, когда URL-адрес полностью квалифицирован, это означает, что никакие части отсутствуют, т.е. это абсолютный URL, начинающийся с http: // или https: // (или другого протокола). Пожалуйста, поправьте меня, если я ошибаюсь!

5 голосов
/ 20 ноября 2009

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

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

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

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

3 голосов
/ 22 июля 2010

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

1 голос
/ 24 мая 2011

Средство выбора DateTime отлично работало в моем локальном тесте XP, но после развертывания на сервере оно не прошло. После 2 дней настойчивости я решил эту проблему, добавив 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>
1 голос
/ 29 сентября 2010

Убедитесь, что ваш тип сценария text / javascript

<script type='text/javascript'
1 голос
/ 21 января 2009

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

alert(typeof $);

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

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

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

0 голосов
/ 15 ноября 2010

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

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

0 голосов
/ 25 февраля 2010

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

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

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

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

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

Тогда ошибка исчезнет.

0 голосов
/ 23 ноября 2009

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

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

0 голосов
/ 19 апреля 2009

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

1. Отладил мой javascript с предложением nickf «alert (typeof $)» и получил предупреждение «undefined»

2. Затем я полностью квалифицировал ресурсы моего скрипта jQuery.

3. Перезагрузите страницу и получили предупреждение «function»

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...