Как убедиться, что $ (document) .ready запущен после того, как jQuery.js доступен? - PullRequest
2 голосов
/ 22 марта 2011

В некоторых случаях из-за скорости загрузки или из-за других асинхронных проблем даже я ставлю $(document).ready() после включения jquery.js, время от времени я получаю жалобы на то, что $ равно undefined. бла-бла-бла.

Я не хочу этого делать:

setTimeout(function() {$(document).ready()... }, 1000);

это выглядит очень хромым.

Итак, есть ли разумный способ или правильный способ или хороший способ гарантировать, что document.ready действительно готов к вызову? :)

Ответы [ 3 ]

4 голосов
/ 22 марта 2011

Я считаю, что это на самом деле невозможно, ( тот факт, что $ будет undefined), заголовок документа загружается синхронно, означая, что каждая строка полностью загружается перед следующей строкой

Здесь есть видео, где этот точный тест ставится на тест , и, кажется, я был прав

Видео: http://www.bennadel.com/blog/1915-How-Javascript-Loading-And-Blocking-Works-By-Default.htm

правильно ли вы загружаете файлы, например

<!DOCTYPE html>
<html>
    <head>
        <title>...</title>
        <script type="text/javascript" src="...."></script>
        <script type="text/javascript" src="...."></script>
        <script type="text/javascript" src="...."></script>
        <script type="text/javascript" src="...."></script>
        <script type="text/javascript">
            jQuery.ready(function(){
               //This is executed once all 4 above have been loaded
            });
        </script>
        <script type="text/javascript" src="...."></script>
        <script type="text/javascript" src="...."></script>
        <!-- The above to scripts are loaded in order after the jquery function has run. -->
    </head>
</html>

метод ready только для jQuery запускается после загрузки документа отверстия, пока DOM не увидит последний конечный тег, обычно </html> [ требуется цитата ]

сказав, что это невозможно, это может быть возможно в IE8 или ниже, причина этого в том, что IE, возможно, является худшим браузером из когда-либо созданных, но они сказали, что IE9 полностью переработан и должен довольствоваться подобными Google, Apple, Mozilla и т. д.

Если вы используете несколько библиотек или перезаписываете переменную $, вы можете получить ее внутри заблокированной области, например:

(function($){
    $.ready(function(){
        //Do your jQuery here !
    });
})(jQuery)
2 голосов
/ 05 апреля 2011

Денис предоставил ссылку с хорошим решением. Я использую это сейчас.

JavaScript - Как мне убедиться, что jQuery загружен?

См. Ответ и объяснение в ссылке.

решение:

<script type='text/javascript'>
runScript();

function runScript() {
    // Script that does something and depends on jQuery being there.
    if( window.$ ) {
        // do your action that depends on jQuery.
    } else {
        // wait 50 milliseconds and try again.
        window.setTimeout( runScript, 50 );
    }
}
</script>
2 голосов
/ 22 марта 2011

Вы можете проверить, загружен ли jQuery, выполнив.

if (typeof jQuery !== 'undefined') {
  //do whatever here
}

Вам не нужно этого делать.Лучше всего включать весь ваш JavaScript в конце вашего HTML и до </body>, jQuery будет первым.Это рекомендуемый метод Yahoo.Вы можете прочитать больше на http://developer.yahoo.com/performance/rules.html. Это не замедлит загрузку вашей страницы и не вызовет проблем с неопределенным jQuery.

...