动态加载jquery

时间:2012-03-25 15:10:12

标签: javascript jquery

我正在一个非常扭曲的环境中工作,我无法通过我正在使用的MVC框架的视图逻辑(Cakephp)来处理这个问题。可能会发生这种情况,因为我必须在已经加载了jQuery脚本的页面中加载这段代码。

如果我只是在我的代码片段中加载jQuery,只要没有其他jQuery脚本存在,它就会起作用。当有2个脚本时,它不起作用,并说$ is not a function。不确定这是如何工作的,但解释可能有所帮助。

无论如何,我已经到了将脚本动态加载到页面中的重点。

所以这是我的代码:

<script id="loadjq" type="text/javascript"></script>
<script id="loadcloud" type="text/javascript"></script>
<script type="text/javascript">
if(typeof jQuery=="undefined"){
    document.getElementById('loadjq').src= 'http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js';
}
document.getElementById('loadcloud').src= '/js/jqcloud.js';
$(document).ready(function(){
    $("#tagcloud").jQCloud(word_list,{});
});
</script>

这会加载脚本,但是当我尝试加载jqcloud.js时,它找不到其他脚本,可能是因为它在加载其他脚本之前运行。有一些肮脏的技巧我可以通过它,但当我到达$(document).ready(function()

时会发生同样的问题

有干净的方法吗?我需要它等待在执行之前加载以前的脚本,或者至少,这就是问题的样子。不确定这是否真的是我的问题。

1 个答案:

答案 0 :(得分:4)

如何在jquery脚本元素上设置事件处理程序,以便在加载完成时调用jqcloud脚本。像

这样的东西
if(typeof jQuery=="undefined"){
   var loadjqScript = document.getElementById('loadjq').src =
                'http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js';
        // Code below handles browser that support script onload 
        // and ones that don't
   var loadFunction = function()  
   {  
      if (this.readyState == 'complete' || this.readyState == 'loaded') {  
           loadJqCloud();   
      }  
   };  
   loadjqScript.onreadystatechange = loadFunction;

   loadjqScript.onload = loadJqCloud;  
}

function loadJqCloud() {
    document.getElementById('loadcloud').src= '/js/jqcloud.js'
 }