3

我正在使用代码博客中的代码,这与此 SO 问题的答案中的代码非常相似。

我的问题是jQuery 包含的代码很好,但由于某种原因,它之后的脚本无法识别 jQuery 已加载。我究竟做错了什么?

我已将代码放在 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);
        }
    }
}
4

3 回答 3

2

问题是您没有等待在 HTML 中调用之前执行脚本。请参阅此示例,该示例使用您提到的博客中的代码。您需要将依赖 jQuery 的代码放在main函数中。

于 2012-05-21T15:53:29.720 回答
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>
于 2012-05-21T15:50:10.283 回答
0

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

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

jsFiddle 示例

于 2012-05-21T15:52:52.783 回答