2

您好,我需要使用 JavaScript 和 php 构建第 3 方小部件。这个小部件将需要在 jQuery 和 jQuery UI 中使用,并且可能在未来的其他 jQuery 库和插件中使用。所以当我的客户把这个小部件放到他的网站上时,我需要知道 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 is not defined。

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

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

请帮忙...

4

3 回答 3

6

如果我正确理解了问题,这应该可以解决问题,jQuery() 函数仅在已加载时才定义。

if (jQuery) { //jQuery is loaded }

您可以为所需的功能执行此操作,无论是 jQuery、jQuery-ui 还是其他。

于 2013-07-12T10:51:24.480 回答
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/

于 2013-07-12T11:24:14.677 回答
0

您可以使用以下方法循环直到 jQuery 对象有效:

var checkJQ = setInterval(function() {
    if(jQuery) {
        console.log('jQuery loaded');
        clearInterval(checkJQ);
    }
}, 300);
于 2015-03-01T21:59:15.073 回答