2012-01-11 29 views
2

我使用modernizr加载jQuery,并且'complete'函数中的所有代码运行正常!但如果我尝试从外部调用一些js'Moderniz.load',萤火虫说:'$未定义'。

这工作:

<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> 
+0

我刚刚学习yepnope/Modernizr,我发现如果我看时间,我很好。我所做的是在你的'complete'中添加一个init()方法。然后,你的$ document.ready行会在这个init()函数中。这工作对我来说... – user1889992 2013-11-25 17:19:14

回答

0

问题就来了,因为你的Modernizr加载jQuery和这样分配的:$ = jQuery的,但是,它仅在complete: function() {上下文中分配。 为了使这方面的工作之外,你Modernizer.load集之前:

var $; 

,将设置的$范围为全球,因此您可以在这一点上任何地方使用它。

如果不设置$全球范围内,使用jQuery仍然会像这样的工作:

jQuery(document).ready(function() 
+0

jQuery(document).ready(function()does not work.firebug says:'jQuery is not defined'。 – Simon 2012-01-12 05:57:23

+0

如果你尝试window.jQuery,看看你会得到什么 – 2012-01-12 06:48:04

+0

window.jQuery undefined – Simon 2012-01-15 18:25:02

5

脚本在yepnope/modernizr.load的异步加载。这意味着,通过设计,它们不会在它们包含之下的空间中执行。通过不阻止页面进一步渲染,这可以使页面性能更好。

callbackcomplete选项有助于您在脚本准备就绪时收到警报。以确保jQuery的存在,最快的路线,是刚刚包住的东西下您的网页上:

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

然后在complete函数,调用appInit()功能。你的页面加载时间会感谢你。

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

如果你的DOM是准备在这一点上,它将运行向右走,或者如果它没有,它会等待更长一点对于发生为好。

希望清除它。

相关问题