2012-05-21 53 views
3

我使用的代码是from a blog,这与this SO question的答案中的代码非常相似。只有在不存在的情况下才加载jQuery时遇到问题

我的问题是,代码将jQuery包括在内,只包括,但由于某些原因,脚本之后的脚本没有意识到已加载jQuery。我究竟做错了什么?

I've placed the code in a jsFiddle.

if (!window.loadjQueryOnce) 
{ 
    function loadjQueryOnce(jQueryVersion) 
    { 
     jQueryVersion = typeof(jQueryVersion) != 'undefined' ? jQueryVersion : "1.7.2"; 

     if (typeof jQuery === "undefined") { 
      var script_tag = document.createElement('script'); 
      script_tag.setAttribute("type","text/javascript"); 
      script_tag.setAttribute("src", 
       "http://ajax.googleapis.com/ajax/libs/jquery/" + jQueryVersion + "/jquery.min.js") 
      document.getElementsByTagName("head")[0].appendChild(script_tag); 
     } 
    } 
} 
+0

你在做什么应用程序,你需要在加载之前检查jQuery? – saluce

+0

这是我的网页上的日常使用。一些页面中包含的一些自定义脚本需要jQuery,并且让他们在代码中包含这些脚本,所以如果我或其他程序员忘记包含jQuery,那么所包含的脚本仍然可以运行。看起来更容易记住包含它。 –

回答

2

问题是,您不等待脚本在HTML中调用之前执行。 See this example,它使用您提到的博客中的代码。您需要在main函数中放置依赖于jQuery的代码。

+0

那么在运行我的loadjQueryOnce函数后,你会建议如何使用基于jQuery的其他脚本,比如jQuery-ui? –

+0

使用'main'函数调用'loadjQueryOnce'的类似函数,该函数为jQuery-UI生成脚本标记。一旦加载并执行jQuery-UI脚本,就需要运行另一个函数'main',其中包含依赖于jQuery-UI的任何内容。 – freejosh

+0

因为我这样做只是为了让生活更轻松,所以我只会废除这个;只是以正常的方式完成它更容易。谢谢! –

1

当您移动loadjQueryOnce('1.7.2')线以上,你检查的jQuery,jQuery是正确加载。 http://jsfiddle.net/JfWeG/2/所以,我不确定你在做什么检查,但代码确实有效。

如果你想确保jQuery在加载依赖它的JS文件之前被加载,那么可以在加载jQuery之后改变你的函数加载它们,或者在每个使用它的脚本之前检查jQuery。

// Load jQueryUI 
if (!jQuery) loadjQueryOnce(); 
loadjQueryUI(); 

if (!jQuery) loadjQueryOnce(); 
loadjQueryDepedentScript(); 

这是笨重的,但它的工作原理。如果您为我们更好地了解您为何这样做,我们可以帮助您提供更好的解决方案。

最好的办法是只创建一个模板,其中jQuery是在头加载的第一件事:

<html> 
    <head> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
     ... 
    </head> 
0

看起来像一个时间问题。如果您在检查之前创建一个小延迟,它可以正常工作。

<script type="text/javascript"> 
setTimeout(function() { 
    if (typeof jQuery === "undefined") { 
     alert('Not recognizing jQuery'); 
    } 
}, 100);​ 
</script> 

jsFiddle example

+0

如果我必须运行这个延迟,如何在我的'loadjQueryOnce()'函数之后包含像jQuery-ui这样的其他脚本? –

+0

即使在你的例子中有100次超时,但它仍然告诉我它没有识别它,尽管1000有窍门。 –

+0

那么100毫秒的延迟只是一个测试,你可以明显地调整。轮询查看jQuery是否被加载可能是加载用户界面的一种方式,尽管这看起来很糟糕。 – j08691

相关问题