检查是否加载了jQuery和jQuery UI

时间:2013-07-12 10:40:14

标签: jquery jquery-ui undefined loaded

您好我需要使用JavaScript和php构建第三方小部件。 这个小部件需要在jQuery和jQuery UI中使用,也可能在未来的其他jQuery库和插件中使用。 所以,当我的客户端将这个Widget放到他的网站时,我需要知道jQuery和jQuery UI是否已经加载,如果没有加载我自己。 我建了一些东西,但它不起作用。

    <script>
if (typeof jQuery == 'undefined') {  
    // jQuery is not loaded  
    //alert('jQuery is not loaded');
    var script = document.createElement('script');
    script.type = "text/javascript";
    script.src = "http://code.jquery.com/jquery-1.9.1.js";
    document.getElementsByTagName('head')[0].appendChild(script);

    var script_ui = document.createElement('script');
    script_ui.type = "text/javascript";
    script_ui.src = "http://code.jquery.com/ui/1.10.3/jquery-ui.js";
    document.getElementsByTagName('head')[0].appendChild(script_ui);

} else {
    // jQuery is loaded
    //alert('jQuery is loaded');
    if (typeof jQuery.ui !== 'undefined') {
        // ui plugin exists
        alert('ui plugin exists');
    } else {
        // ui plugin DOES NOT exist
        //alert('ui plugin DOES NOT exist');
        var script_ui = document.createElement('script');
        script_ui.type = "text/javascript";
        script_ui.src = "http://code.jquery.com/ui/1.10.3/jquery-ui.js";
        document.getElementsByTagName('head')[0].appendChild(script_ui);
    }
}
</script>

这工作正常,但是当我尝试使用jQuery datepicker时,我得到了ReferenceError:jQuery没有定义。

    <script>
jQuery(document).ready(function() {
  // Handler for .ready() called.
    jQuery(function() {
        jQuery( "#datepicker" ).datepicker();
    });
});
</script>

即使没有jQuery(文档).ready(function()它也不起作用

请Hellp ......

3 个答案:

答案 0 :(得分:6)

如果我正确理解了问题,这应该可以解决问题,只有在已经加载的情况下才定义jQuery()函数。

if (jQuery) { //jQuery is loaded }

你可以为你需要的函数执行此操作,无论是jQuery,jQuery-ui还是其他函数。

答案 1 :(得分:0)

到时候

<script>
jQuery(document).ready(function() {
    // Handler for .ready() called.
    jQuery(function() {
        jQuery( "#datepicker" ).datepicker();
    });
});
</script>
到达

,jQuery可能不一定要加载,浏览器然后不知道它做了什么,尝试执行它并告诉你“我不知道jQuery是什么”。如果你稍后再次调用相同的代码块,它应该可以正常工作。

解决这个问题的最简单方法是将$(document).ready()事件处理程序放入一个单独的.js脚本中,并在头文件中包含该脚本,这样jQuery就可以调用事件处理程序。准备好了,而不是相反。我创造了一个小提琴来证明这一点:http://jsfiddle.net/Cjv2k/4/

答案 2 :(得分:0)

你可以使用这个循环直到jQuery对象有效:

var checkJQ = setInterval(function() {
    if(jQuery) {
        console.log('jQuery loaded');
        clearInterval(checkJQ);
    }
}, 300);