只有在不存在的情况下才加载jQuery

时间:2012-05-21 15:44:39

标签: jquery dynamic

我正在使用代码from a blog,这与this SO question的答案中的代码非常相似。

我的问题是代码使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);
        }
    }
}

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

当您将loadjQueryOnce('1.7.2')行移动到上面检查jQuery的位置时,jQuery会正确加载。 http://jsfiddle.net/JfWeG/2/所以,我不确定你在哪里做检查,但代码确实有效。

如果你想在加载依赖它的JS文件之前确保加载jQuery,那么要么在加载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>

答案 2 :(得分:0)

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

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

<强> jsFiddle example