2012-06-22 113 views
4

對於一些情況說我需要在使用一段JavaScript這樣的加載jQuery的:如何知道是否JQuery的加載完成後

<script type="text/javascript"> 
    if (typeof jQuery == 'undefined') 
    { 
    var script = document.createElement('script'); 
    script.type = "text/javascript"; 
    script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"; 
    document.getElementsByTagName('head')[0].appendChild(script); 
    } 
</script> 

但我怎麼會知道,JQuery的加載完成,這樣我可以使用它。

回答

-4

你可以把代碼

$(document).ready(function() { 
    // Handler for .ready() called. 
}); 

下面是文檔:http://api.jquery.com/ready/

編輯: 想我得到了錯誤的問題。 ,所以我不能回答怎麼看的其加載,但可以提供另一種方法來加載庫。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script>window.jQuery || document.write("\x3Cscript src=\"path/to/js/jquery-1.7.1.min.js') }}\">\x3C/script>")</script> 

這裏,jQuery的本地版本被加載,如果谷歌API是不可用的。比上面的剪切應該足夠安全,知道jQuery已加載。

+2

不能使用'的document.ready()'如果jQuery是尚未加載。這對OP的動態加載jQuery的問題沒有幫助。 – jfriend00

6

您必須編寫代碼來檢測時,動態加載腳本被加載,不幸的是,它在一些舊的瀏覽器略有不同,所以它不是因爲它可以作爲簡單。下面是關於如何做一個很好的參考文章:http://www.ejeliot.com/blog/109

下面是一些從文章的代碼:

function loadScript(sScriptSrc, oCallback) { 

    var oHead = document.getElementsByTagName('head')[0]; 
    var oScript = document.createElement('script'); 

    // make sure callback isn't run more than once 
    function runCallback() { 
     if (oCallback) { 
      oCallback(); 
      oScript.onload = oScript.onreadystatechange = null; 
      oCallback = null; 
     } 
    } 

    oScript.type = 'text/javascript'; 
    // most browsers 
    oScript.onload = runCallback; 
    // IE 6 & 7 
    oScript.onreadystatechange = function() { 
     if (this.readyState === 'complete') { 
      runCallback(); 
     } 
    } 
    oScript.src = sScriptSrc; 
    oHead.appendChild(oScript); 
} 

或者,你可以用它做這個工作,你的小圖書館之一。你可以在這裏看到一些列表:http://microjs.com/#loader。雖然我不確定你想用另一個庫來協助加載你的主庫。

+0

他也可以嘗試使用在這裏現成的懶裝載機之一:http://microjs.com/#loader。 –

+0

謝謝。我正在尋找你上面提到的解決方案(第一個鏈接)。 –

+0

@TimDumol - 好主意 - 我已經納入了這個建議。 – jfriend00

2

嘗試onload事件:

//..... 
script.onload = function(){ 
    alert('jQuery is loaded succesfully'). 
}; 
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"; 
+2

這適用於某些瀏覽器,但不適用於舊版IE。 – jfriend00

0

榮譽爲jfriend的答案。回調很性感。

在它二裂紋。

function loadJQ(callback) { 
    if(!window.jQuery) { 
    // Create jQuery script element. 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'path/to/jquery.js'; 
    document.body.appendChild(script); 

    script.onload = function(){ callback(jQuery); }; 
    // IE 6 & 7 ala jfriend00 
    script.onreadystatechange = function() { 
     if (this.readyState == 'complete') callback(jQuery); 
    } 
    } else { 
    callback(jQuery); 
    } 
} 

調用

loadJQ(function($){ 
    alert($ === jQuery); // true. jquery is loaded. 
}); 
+0

呵呵,當然我太遲了,工程師也打敗了我吧。 script.onload是關鍵 –

+0

script.onload不會在一些較舊版本的IE工作。 – jfriend00

+0

bah ..好的電話。 *更新我的片段* –

相關問題