2011-11-11 69 views
1

我看到有人問這個問題,它被標記爲回答 - 但我不相信它回答我的進一步問題。如何阻止jQuery函數運行,直到jQuery庫已完全加載

我試圖在我的客戶頁面中嵌入日曆 - JS,CSS和jQuery在我的服務器上,所以爲了讓我的客戶只需添加一行代碼,我給他們的鏈接,鏈接然後動態加載所需的其他文件,然後使用document.write將文本框,下拉列表和按鈕添加到BOM中。

但是,要將jQuery日曆添加到文本框中,我必須確保jQuery已加載。如果它沒有,當頁面腳本點擊$(檢查jQuery,如果它沒有加載,所有的jQuery被忽略。我怎樣才能讓腳本停下來等待(沒有客戶不必按一個按鈕)

所以我給我的客戶這一行:

<script src="http://www.myserver.com/testjs/js/mt.js" language="javascript" type="text/javascript"></script> 

的mt.js文件包含:

//JS to load files 
function loadjscssfile(filename, filetype) { 
if (filetype == "js") { //if filename is a external JavaScript file 
    var fileref = document.createElement('script') 
    fileref.setAttribute("type", "text/javascript") 
    fileref.setAttribute("src", filename) 
} 
else if (filetype == "css") { //if filename is an external CSS file 
    var fileref = document.createElement("link") 
    fileref.setAttribute("rel", "stylesheet") 
    fileref.setAttribute("type", "text/css") 
    fileref.setAttribute("href", filename) 
} 
if (typeof fileref != "undefined") 
    document.getElementsByTagName("head")[0].appendChild(fileref) 
} 

loadjscssfile("http://www.myserver.com/testjs/css/custom-theme/jquery-ui-1.8.16.custom.css", "css"); 
loadjscssfile("http://www.myserver.com/testjs/js/jquery-1.6.2.min.js", "js"); 
loadjscssfile("http://www.myserver.com/testjs/js/jquery-ui-1.8.16.custom.min.js", "js"); 

//write GUI to DOM 
document.write("<input id=\"calendar\" type=\"text\" />"); 
document.write("<input id=\"btnCheck\" type=\"button\" value=\"Check\" />"); 
document.write("<br /><div id=\"result\" />"); 

//Jquery to add calendar to textbox added above 
$(function() { 
$("#calendar").datepicker({ 
    showOn: "button", 
.... 
.... 
});  

所以如果jQuery的/ UI/CSS不是招沒有加載,腳本會到達這裏,而不會將jQuery日曆添加到文本框中。

任何人都可以建議如何解決這個問題嗎?

謝謝,馬克

+0

我想這個問題給你你的答案http://stackoverflow.com/questions/2011938/load-jquery-wait –

+0

謝謝安迪 - 我也會嘗試。 – Mark

回答

0

我認爲你的方式將無法正常工作。因爲:

您使用示波器.appendChild()。這意味着新的HTML標籤將被添加到您的<head>元素的末尾。追加孩子並不意味着瀏覽器會自動執行這些操作。 基於這個事實,你必須分離你的標準js代碼和jQuery代碼。 如果你想測試 - 如果jquery被加載 - 讀here。測試成功後,您可以運行日期選擇器代碼或將代碼放入其中(這是更好的方法)。 。

+0

嗨 - 你的意思是如果我拿我的jQuery代碼來「製作」日曆,並將其作爲單獨的js加載(在當前文件加載結束時),它應該在其他腳本加載後運行? loadjscssfile(「http://www.myserver.com/testjs/css/custom-theme/jquery-ui-1.8.16.custom.css」,「css」); loadjscssfile(「http://www.myserver.com/testjs/js/jquery-1.6.2.min.js」,「js」); loadjscssfile(「http://www.myserver.com/testjs/js/jquery-ui-1.8.16.custom.min.js」,「js」); loadjscssfile(「http://www.myserver.com/testjs/js/myjquerycodetorunhere.js」,「js」); 再次感謝,馬克 – Mark

+0

不,我的意思是你必須確保你的日曆的源代碼將在jquery文件的腳本標記執行後執行(例如,在你的身體標記的開始或將它包裹到一個事件中 - 例如'onLoad') – reporter

+0

嗨 - 謝謝 - 雖然我將無法控制onLoad,因爲這將嵌入到客戶現有頁面中。如果我只是給我的客戶4行代碼,嵌入,等 - 而不是我曾經希望給的 - 這樣加載腳本,而不是.appendChild,然後按順序加載/運行?因此,如果我的電話創建jquery日曆是在我的最終

相關問題