2013-04-12 164 views
2

同步使用jQuery加載函數的最佳方法是什麼?jQuery .load(函數)同步

我需要加載圖像,但不能執行下一行代碼,直到該圖像已加載。

我可以循環一個變量,直到加載完成,但想知道是否有更好的方法來做到這一點。

var img = jQuery('<img src="' + url + '"/>').load(function() {     

      }); 
    //Run code here once img load has comlpeted.            
+1

這有你需要的東西:http://stackoverflow.com/questions/5364166/how-to-load-page-synchronously-using-jquery – tymeJV

回答

7

據我所知,在load事件總是會觸發異步,但如果圖像(在一些瀏覽器)已經被緩存。唯一可靠的解決方案是像你一樣把代碼放在回調中。但是,爲確保load處理程序將始終在所有瀏覽器中被觸發,即使圖像被緩存,請確保在之前添加處理程序,設置圖像的src屬性。

1
var img = jQuery('<img src="' + url + '"/>').load(runner); 
function runner() { 
    //run code here once image is loaded 
} 
+0

很好的抓住plalx – zarazan

4

您還可以使用回調函數來獲得同步行爲 -

var result = $('#main-container').load('html/Welcomeform.html', 
       function() { 
        if($("textarea").find("#mail-id")){ 
         $("textarea#mail-id").val(email_id); 
        } 
        }); 
0

我來到這裏尋找一個類似的解決方案。從讀取中,使用.load是不可能的,您需要使用AJAX請求,正如問題註釋所指出的那樣。

在我的情況下,我需要加載一個html文件,我添加了一個轉換來更改內容。舊內容在轉換後的新內容之前顯示,即使我在加載回調中顯示內容。

var main = $("#main"); 
    main.load("about.html", displaySection); 

function displaySection() { 
    main.show('blind'); 
} 

我的解決方法是運行顯示加載的內容在超時函數內的延遲參數爲200的過渡。

var main = $("#main"); 
    main.load("about.html", displaySection); 

function displaySection() { 
    setTimeout(function() { 
     main.show('blind'); 
    }, 200); 
} 

的問題可能是,如果連接是緩慢,在新頁面的時間超過200毫秒加載,但在這種情況下,我不知道該回調將在稍後推出。我不明白爲什麼在沒有超時的情況下不工作,我感覺很難看,但它解決了我的問題......以防萬一其他人沒有考慮到這種可能性。