Почему я получаю jQuery не определена ошибка? - PullRequest
2 голосов
/ 27 декабря 2010

Мне нужно использовать внешний файл js для загрузки jquery. Код из моего файла JS ниже:

 document.write('<script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>');

    (function($) {
        $(document).ready(function() {
            alert('it works!!');
        });
    })(jQuery);

В консоли firefox firefox я вижу эту ошибку: «jQuery не определен», и я думаю, это потому, что библиотека jQuery загружается после функции $ из моего файла js.

У вас есть идеи о том, как я могу это исправить? Если я запускаю скрипт из консоли firebug, все работает нормально.

Ответы [ 4 ]

5 голосов
/ 27 декабря 2010

Сгенерированный элемент <script> появится после текущего элемента скрипта, и код в нем не будет выполняться до тех пор, пока не закончится код текущего элемента <script>.

Вам нужно загрузить библиотеку перед запуском <script>, который пытается ее использовать.

Изменить на:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
    (function($) {
        $(document).ready(function() {
            alert('it works!!');
        });
    })(jQuery);
</script>
2 голосов
/ 27 декабря 2010

Вы правы относительно того, что jquery не загружается во время вызова. Вам нужно написать функцию, которая загрузит библиотеку jQuery и только позже вызовет ваш код. Кроме того, вы можете отложить выполнение кода, но это не на 100% полное доказательство.

Обновление. Ссылка для проверки, был ли загружен jQuery , полезный для обратного вызова.

1 голос
/ 27 декабря 2010

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

Мое предложение вроде хака:

document.write('<script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js" onload="loaded()" onreadystatechange="loadedIE()"></script>');

function loadedIE() { //for ie
    if(this.readyState == 4){loaded();}
};

function loaded() {
    $(document).ready(function() {
        alert('it works!!');
    });
};

Я думаю, что readystatechange слушатель должен работать (это взлом IE).

1 голос
/ 27 декабря 2010

Почему вы используете document.write для загрузки jQuery? Просто поместите тег <script> в HTML-код напрямую.

...