2012-05-21 58 views
3

我使用的代碼是from a blog,這與this SO question的答案中的代碼非常相似。只有在不存在的情況下才加載jQuery時遇到問題

我的問題是,代碼將jQuery包括在內,只包括,但由於某些原因,腳本之後的腳本沒有意識到已加載jQuery。我究竟做錯了什麼?

I've placed the code in a jsFiddle.

if (!window.loadjQueryOnce) 
{ 
    function loadjQueryOnce(jQueryVersion) 
    { 
     jQueryVersion = typeof(jQueryVersion) != 'undefined' ? jQueryVersion : "1.7.2"; 

     if (typeof jQuery === "undefined") { 
      var script_tag = document.createElement('script'); 
      script_tag.setAttribute("type","text/javascript"); 
      script_tag.setAttribute("src", 
       "http://ajax.googleapis.com/ajax/libs/jquery/" + jQueryVersion + "/jquery.min.js") 
      document.getElementsByTagName("head")[0].appendChild(script_tag); 
     } 
    } 
} 
+0

你在做什麼應用程序,你需要在加載之前檢查jQuery? – saluce

+0

這是我的網頁上的日常使用。一些頁面中包含的一些自定義腳本需要jQuery,並且讓他們在代碼中包含這些腳本,所以如果我或其他程序員忘記包含jQuery,那麼所包含的腳本仍然可以運行。看起來更容易記住包含它。 –

回答

2

問題是,您不等待腳本在HTML中調用之前執行。 See this example,它使用您提到的博客中的代碼。您需要在main函數中放置依賴於jQuery的代碼。

+0

那麼在運行我的loadjQueryOnce函數後,你會建議如何使用基於jQuery的其他腳本,比如jQuery-ui? –

+0

使用'main'函數調用'loadjQueryOnce'的類似函數,該函數爲jQuery-UI生成腳本標記。一旦加載並執行jQuery-UI腳本,就需要運行另一個函數'main',其中包含依賴於jQuery-UI的任何內容。 – freejosh

+0

因爲我這樣做只是爲了讓生活更輕鬆,所以我只會廢除這個;只是以正常的方式完成它更容易。謝謝! –

1

當您移動loadjQueryOnce('1.7.2')線以上,你檢查的jQuery,jQuery是正確加載。 http://jsfiddle.net/JfWeG/2/所以,我不確定你在做什麼檢查,但代碼確實有效。

如果你想確保jQuery在加載依賴它的JS文件之前被加載,那麼可以在加載jQuery之後改變你的函數加載它們,或者在每個使用它的腳本之前檢查jQuery。

// Load jQueryUI 
if (!jQuery) loadjQueryOnce(); 
loadjQueryUI(); 

if (!jQuery) loadjQueryOnce(); 
loadjQueryDepedentScript(); 

這是笨重的,但它的工作原理。如果您爲我們更好地瞭解您爲何這樣做,我們可以幫助您提供更好的解決方案。

最好的辦法是隻創建一個模板,其中jQuery是在頭加載的第一件事:

<html> 
    <head> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
     ... 
    </head> 
0

看起來像一個時間問題。如果您在檢查之前創建一個小延遲,它可以正常工作。

<script type="text/javascript"> 
setTimeout(function() { 
    if (typeof jQuery === "undefined") { 
     alert('Not recognizing jQuery'); 
    } 
}, 100);​ 
</script> 

jsFiddle example

+0

如果我必須運行這個延遲,如何在我的'loadjQueryOnce()'函數之後包含像jQuery-ui這樣的其他腳本? –

+0

即使在你的例子中有100次超時,但它仍然告訴我它沒有識別它,儘管1000有竅門。 –

+0

那麼100毫秒的延遲只是一個測試,你可以明顯地調整。輪詢查看jQuery是否被加載可能是加載用戶界面的一種方式,儘管這看起來很糟糕。 – j08691

相關問題