$ не определено при загрузке jQuery через Modernizer. - PullRequest
2 голосов
/ 12 января 2012

Я загружаю jQuery с modernizr, и весь код в функции complete работает нормально!Но если я пытаюсь вызвать некоторые js извне, Moderniz.load 'firebug говорит:' $ не определен '.

Это работает:

<script>
Modernizr.load([
{
    load: [ '//ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js', '//ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js'],
    complete: function () {
      if ( !window.jQuery ) {
            Modernizr.load('/weblounge-sites/www/js/jquery-1.7.min.js', '/weblounge-sites/www/js/jqueryui-1.8.min.js');
      }
    }
},
{
    load: [ 'some additional scripts' ],
    complete: function() {
        $ = jQuery;
        $(document).ready(function(){
          some js
          });

        });
    }
},  
{
    test: Modernizr.boxshadow,
    nope: 'polyfills/PIE.js',
}
]);
</script>

Но вызов из строки представленияпозже происходит сбой:

<script>
$(document).ready(function(){
    $('#hauptsponsoren').cycle({
        fx: 'fade', 
        speed: 4000,
        timeout: 10000
    });                 
});
</script>

Ответы [ 2 ]

5 голосов
/ 16 января 2012

Скрипты в yepnope / modernizr.load загружаются асинхронно.Это означает, что по замыслу они не будут выполняться в пространстве непосредственно под их включением.Это повышает производительность страницы, не блокируя дальнейшую визуализацию страницы.

Опции callback и complete доступны для оповещения о готовности скриптов.Самый быстрый способ убедиться, что jQuery существует, - это просто обернуть нижнюю часть страницы:

<script>
function appInit() {
  $(document).ready(function(){
    $('#hauptsponsoren').cycle({
      fx: 'fade', 
      speed: 4000,
      timeout: 10000
    });                 
  });
}
</script> 

А затем в функции complete вызовите функцию appInit().Время загрузки вашей страницы поблагодарит вас.

complete: function() { ...; appInit(); }

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

Надеюсь, что это прояснится.

0 голосов
/ 12 января 2012

Проблема возникает из-за того, что ваш modernizr загружает jQuery и назначает его следующим образом: $ = jQuery, однако он назначается только в контексте complete: function() {.Чтобы заставить его работать вне этого контекста, перед вашим Modernizer.load набором:

var $;

Это установит область действия $ как глобальную, чтобы вы могли использовать ее где угодно в этой точке.1008 * Если вы не установите глобальную область действия $, использование jQuery все равно будет работать так:

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