$ (document) .ready (function () {...}) запускается до загрузки скрипта плагина - PullRequest
2 голосов
/ 05 июня 2010

Я получаю ошибку JS, потому что мой обработчик $(function () {...}) запускается, по-видимому, до загрузки необходимого сценария плагина. Это происходит только в IE (тестирование в IE7).

В моем <head> есть некоторый HTML, который выглядит следующим образом:

<script type="text/javascript" src="../resources/org.wicketstuff.jwicket.JQuery/jquery-1.4.2-special.js"></script>
...
<script type="text/javascript" id="noConflict"><!--/*--><![CDATA[/*><!--*/
jQuery.noConflict();
/*-->]]>*/</script>
...
<script type="text/javascript" src="../resources/com.csc.aims.wicket.components.collapsiblefieldset.CollapsibleFieldsetBehavior/jquery.collapsiblefieldset.js"></script>
<link rel="stylesheet" type="text/css" href="../resources/com.csc.aims.wicket.components.collapsiblefieldset.CollapsibleFieldsetBehavior/jquery.collapsiblefieldset.css" />
<script type="text/javascript">
jQuery(function(){
jQuery('#collapse119').collapse({"iconClosedUrl":"../resources/img/white_plus","iconOpenUrl":"../resources/img/white_minus"});
});
</script>

Обратите внимание, что последовательность, согласно HTML-коду, выглядит следующим образом:

  1. JQuery-1.4.2-special.js
  2. jQuery.noConflict () call
  3. jquery.collapsiblefieldset.js // определяет $ .fn.collapse
  4. jQuery ('# collapse119'). Collapse (...) называется

Когда этот код запускается в FF, все работает нормально. Когда я тестирую его в IE7 (или IE8 с Compat. View: режим стандартов IE7), я получаю ошибку javascript. Отладчик показывает мне, что jQuery.fn.collapse не определен.

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

Почему файл collapsiblefieldset.js не загружается до запуска моего обработчика $ () ready? Любое понимание будет оценено! Спасибо.

Ответы [ 3 ]

4 голосов
/ 05 июня 2010

Вы используете

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

который является синонимом

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

Вместо этого вы можете попробовать

$(window).load( function(){...} );

, который запускается позже в последовательности загрузки страницы.

1 голос
/ 05 июня 2010

Поместите все свои скрипты внизу страницы, прямо перед тегом </body>.

Если это не помогло, переместите скрипты, которые не загружаются, вовремя назад.на <head> и оставьте остальные сценарии внизу.

0 голосов
/ 08 июля 2014

Для тех, кто страдает от этой проблемы, возможно, стоит проверить, что у вас нет нескольких ссылок на jQuery. Если в заголовке определены плагины, они будут переопределены вторым вызовом jQuery в теле.

...