2012-06-26 68 views
0

我想用我的回調函數JS解決一個問題。我只是想根據索引更新3 div的HTML。請在下面找到使用回調不能正常工作的遞歸Javascript函數

<div id="try0">50</div> 
<div id="try1">50</div> 
<div id="try2">50</div> 

function getNumberOfAnswers(questionID, callback) 
{ 
    var value = i*10; 
    callback(value.toString()); 

} 

var i=0; 
getNumberOfAnswers(i, function callFunc(ratio){ 
    var itemToChg = 'try'+i; 
document.getElementById(itemToChg).innerHTML = ratio; 
    if(i<3){ 
     i++; 
     getNumberOfAnswers(i,callFunc(ratio)); 

    } 

    }); 

我沒有把任何標籤上上面的代碼來簡化代碼,但我做了一個的jsfiddle它。 http://jsfiddle.net/cyrilGa/zmtQ8/。在結束的第三行,我試圖寫getNumberOfAnswers(i,ratio);但它不起作用。 有人可以幫我這個 乾杯

+0

我不知道我f可以修復這種重疊的調用/聲明結構,但我認爲你只需選擇最簡單的方法來完成一件簡單的事情。你能解釋一下你準備做什麼嗎? –

+0

說「它沒用」是沒用的。你期望什麼?究竟發生了什麼?你得到了什麼錯誤? – RobG

+0

我的實際問題實際上比上面的更復雜一點,所以我試圖簡化它。我使用Javascript異步查詢parse.com數據庫10次。所以我必須等待一個查詢的結束(因此回調),然後再次查詢它。 (因此遞歸部分)。對於數據庫中的每個結果,我正在更新div內的值。希望這是明確的 –

回答

2

行:

var value = i*10; 

應該

var value = questionID * 10; 

而且我覺得

getNumberOfAnswers(i,callFunc(i)); 

應該是:

getNumberOfAnswers(i,callFunc); 
+0

非常感謝您的幫助 –

0

您需要在底部,以取代遞歸callFunc(ratio);callFunc(i);因爲參數ratio仍然等於0,而你增加i。其他一切都很好。

+0

當我使用callFunc(i)時,函數實際返回i。我期望的是得到我* 10; –

1

不要爲此使用遞歸,這很愚蠢。

for (var i = 0; i < 3; i++) { 
    document.getElementById('try' + i).innerHTML = i * 10; 
} 

這是你想要的嗎?

+0

我的實際問題實際上比上面的更復雜一點,所以我試圖簡化它。我使用Javascript異步查詢parse.com數據庫10次。所以我必須等待一個查詢的結束(因此回調),然後再次查詢它。 (因此遞歸部分)。對於數據庫中的每個結果,我正在更新div內的值。希望這是明確的 –