2012-03-25 98 views
4

我正在一個非常扭曲的環境中,我無法通過我正在使用的MVC框架(Cakephp)的視圖邏輯來處理這個問題。這可能發生,因爲我必須在已經加載了jQuery腳本的頁面中加載這段代碼。動態加載jquery

如果我只是在我的代碼段中加載jQuery,只要沒有其他jQuery腳本存在。當有兩個腳本時,它不起作用,並說$ 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()

有沒有一個乾淨的方式來做到這一點?我需要它在執行之前等待以前的腳本加載,或者至少,這是問題的樣子。不確定這是否真的是我的問題。

回答

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' 
}