2010-04-27 39 views
1

我有下面的代碼塊的代碼時,該文檔已準備就緒:

$(document).ready(function() { 
    createDivs(); // creates some divs with class 'foo'; 

    // iterate 
    $(".foo").each(function(index) { 
     alert(index + " - " + $(this).text()); 
    }); 
} 

我發現「迭代」部分想念我創建的div createDivs()方法完全!有沒有我不知道的時間問題?爲什麼jQuery沒有看到剛剛創建的div?

+0

你肯定createDivs成功創建div並將它們添加到DOM? – justkt 2010-04-27 18:13:51

+7

您需要在'createDivs()'中發佈代碼。 – 2010-04-27 18:13:56

+0

@justkt - 我用Firebug打開頁面,並且看到正確創建了div。 – ripper234 2010-04-27 19:47:01

回答

0

我發現,Javascript就像是F1賽車中的公牛,當涉及到執行代碼。沒有讓它等待在任何特定的鏈中執行代碼。

您應該創建一個情況,createDivs()可以在任何相關代碼完成後觸發回調。沒有看到createDivs代碼,很難給你一個實現它的方法。

UPDATE

真的只是如果你正在做一個異步調用(根據下我的朋友)適用。

+3

據我所知,如果你沒有做任何異步工作,Javascript應該順序執行代碼。當然,如果createDivs關閉並在服務器上調用某些內容,並在成功回調中創建div,或者沿着這些線路創建div,那麼它就一直處於空中。 – justkt 2010-04-27 18:23:49

+0

如果你曾經試過這樣做:''('。somediv')。slideUp(); $('。somediv')。remove();',你知道JS中的第一手代碼序列。我不確定這是否屬於你的異步定義,但當我第一次看到它時,它讓我感到吃驚。 – dclowd9901 2010-04-27 18:27:31

+2

這是異步的,動畫按間隔執行。 – 2010-04-27 18:28:14

0

時間不是問題。也許createDivs()不會將元素添加到DOM?

+0

這個答案更適合作爲對問題的評論。 – 2010-04-27 18:21:03

1

在我的經驗DOM操作可以在時間,可能是由於瀏覽器的優化作用是異步的,我通常的解決辦法是有createDivs()返回然後創建的div使用返回的元素藏漢

var divs = createDivs(); 
$('.foo').and(divs).each(function(){ 
    //happy fun time 
})