2012-07-02 42 views
0

我真的很喜歡一些關於重構下面函數的最佳方法的建議。我正在做的是設置文件閱讀器並刷新for循環中的多個div內容。基本上,只要我在底部警報中說「alert(sparespacetofill)」,我的代碼就完美了;「進行測試,但是當我把這個警報提出來時,我的div的內容不會像應該那樣刷新。在函數完成運行之前,「reader.onload」函數顯然沒有被調用,但我真的被困在如何以不同的方式構造它。在jQuery中放置onload函數的問題

function setup_reader(file,number, sparespacetofill) { 

var name = file.name; 
var reader = new FileReader(); 

reader.onload = function(e) { 
$('#' + sparespacetofill).children('img').attr('src',e.target.result); 

if ($('#' + sparespacetofill).find("p").length <= 0 && sparespacetofill !='pic0') { 
$('#' + sparespacetofill).append('<p id="deleteit">Delete<a></p>'); 
} 

} 

reader.readAsDataURL(file); 

//alert(sparespacetofill);///ISSUE IS IN HERE IF I UNCOMMENT THIS OUT 

return sparespacetofill; 
} 
+0

你可以嘗試onloadend()而不是onload? – ustun

+0

http://www.htmlgoodies.com/beyond/javascript/read-text-files-using-the-javascript-filereader.html#fbid=4DqX_0Cz_6l也許這有助於 – Simon

+0

嘗試了onloadend,並根據鏈接添加閉包但仍然沒有快樂? – user1495476

回答

0

當onload事件觸發,具有AJAX操作完全結束的?

如果是這樣,無論您在函數返回時試圖執行的任何功能,而是在onload函數結束時執行它。調用那些繼續使用你正在運行的任何代碼的函數。

根據需要重新組織代碼,以便它可以拆分爲兩部分:在setup_reader()之前運行並調用setup_reader()的部分,以及在onload事件觸發後運行的部分。

+0

嗨馬特,我做了一個函數,即:setup_reader(文件,我,sparespacetofill); – user1495476

+0

不知道我是否正確理解你,但依靠setup_reader函數return來啓動代碼中的下一步(因爲onload事件尚未激活)可能不合理。當函數返回時,不要繼續下一步,而是繼續onload事件處理程序的末尾,通過調用函數來運行需要運行的任何代碼。 –

+0

非常好,這個竅門,加上上面的Simons鏈接的幫助,關閉onload。感謝所有人,非常感謝 – user1495476

0

您可以嘗試使用Javascript的setTimeout()這樣的方法,

setTimeout(return sparespacetofill, 3000) ; 

//代替此行

alert(sparespacetofill);///ISSUE IS IN HERE IF I UNCOMMENT THIS OUT 

return sparespacetofill; 
+0

好主意,嘗試添加,但它仍然通過 – user1495476