【问题标题】:Unable to load jQuery UI dynamically - Uncaught TypeError: Cannot read property 'ui' of undefined无法动态加载 jQuery UI - Uncaught TypeError: Cannot read property 'ui' of undefined
【发布时间】:2014-09-03 18:34:35
【问题描述】:

我动态加载我的 jQuery 和 jQuery UI 文件。 jQuery 文件加载成功,但是当 jQuery UI 文件加载时发生错误

以下是控制台中显示的内容:Uncaught TypeError: Cannot read property 'ui' of undefined

我的代码如下

(function()
{
var jQuery;
if (window.jQuery === undefined)
{
    var script_tag = document.createElement('script');
    script_tag.setAttribute("type", "text/javascript");
    script_tag.setAttribute("src",
            "//code.jquery.com/jquery-1.11.0.min.js");




    if (script_tag.readyState)
    {
        script_tag.onreadystatechange = function()
        {
            if (this.readyState === 'complete' || this.readyState === 'loaded')
            {
                scriptLoadHandler();
            }
        };
    }

    else
    {
        script_tag.onload = scriptLoadHandler;
    }
    (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);

}

else
{
    jQuery = window.jQuery;

    main();
}

function scriptLoadHandler()
{
    jQuery = window.jQuery.noConflict(true);

    main();
}

function main() {

    jQuery(document).ready(function($) {
        jQuery.getScript('http://code.jquery.com/ui/1.11.1/jquery-ui.min.js', function() {
            jQuery.noConflict(true);
        });
};
})();

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 仔细检查你的括号。正如发布的那样,main()jQuery(document).ready... 在您的标记中没有正确关闭。

标签: javascript jquery jquery-ui


【解决方案1】:

只需从您的 noConflict 调用中删除 true;这放弃了对 $ 的控制,但留下了 jQuery 供 jQuery UI 使用:

/******** Called once jQuery has loaded ******/

    function scriptLoadHandler() {
        // Restore $ to its previous values and store the
        // new jQuery in our local jQuery variable
        jQuery = window.jQuery.noConflict(); // no argument!
        // Call our main function
        main();
    }

【讨论】:

    【解决方案2】:

    使用:

    $(document).ready(function() {}); 
    

    $(function() {});
    

    这两个语句实际上是完全相同的。所以第二个调用只是第一个调用的捷径。

    $ 符号再次只是 jQuery 的快捷方式。如果您已将 jQuery 加载到您的网站中,则可以同时使用这两者。

     (function($){
     }(jQuery));
    

    在这里,您正在调用该匿名函数(以​​ $ 作为参数)并传入 jQuery 对象。

    【讨论】:

    • 这是一个独立的 JS 文件。它可以添加到任何项目并包含在内。做你刚才提到的 jQuery 应该是之前包含的。这里我们动态加载 jQuery 文件。你说的我也试过了,还是不行
    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2019-02-12
    • 2021-09-20
    • 2021-06-08
    • 1970-01-01
    相关资源
    最近更新 更多