2013-08-28 62 views
0

我使用javascript遞歸循環填充表單域並通過它們提示用戶。JavaScript中的遞歸循環,基於鏈接點擊增量

我遇到了遞歸問題,無法按預期工作。

我有一個遞歸循環,提示用戶通過6個輸入字段。

field1和field2按預期方式填充,但field3和field4一起觸發,field5和field6一起觸發。

我認爲它與全局變量或局部變量有關,或者可能在loop()函數內作用域,但我正在努力解決它。

的jsfiddle:http://jsfiddle.net/9QtDw/5/

單擊「保存數據」按鈕,關火環,你可以看到環路()函數迭代與確認彈出窗口引導用戶。

任何幫助指向我在正確的方向非常感謝。

var x = 0; 

var fieldnames = ["field1", "field2", "field3", "field4", "field5", "field6"] 

function loop(y) { 
i = y; 
if (i >= fieldnames.length) { // check to see if loop has run through the number of elements in the fieldnames array 
    return; 
} 
confirm('Highlight the ' + fieldnames[i] + ' text'); 
console.log("outside on click function i=" + i); 

//function to be called when button is clicked 
$("#text-submit").on("click", function(){ 
    //fieldinfo = $("#cs-ResultText").text(); 
    $('#' + fieldnames[i] + '').val('this is where i = ' + i); 

    // increment i and recall the loop function for the next field 
    if(i >= fieldnames.length - 1){ return false; } 

    i=i+1; 
    console.log(i); 

    console.log("inside on click function i=" + i); 
    return loop(i); // the recusive call back into the loop 
}); 
return false; 
} 

// only fire off the loop call on the first run through, after that it's called on #text-submit click 
if(x === 0){ 
loop(x); 
} 

回答

0

試試這個:

var x = 0; 

var fieldnames = ["field1", "field2", "field3", "field4", "field5", "field6"] 

function loop(y) { 
    i = y; 
    if (i >= fieldnames.length) { return; } 
    confirm('Highlight the ' + fieldnames[i] + ' text'); 
    $('#' + fieldnames[i] + '').val('this is where i = ' + i); 
    return false; 
} 

$("#text-submit").on("click", function(e){   
    e.preventDefault();    
    if(i >= fieldnames.length - 1){ return false; }   
    i=i+1;    
    loop(i); 
}); 

if(x === 0){ 
    loop(x); 
} 

工作小提琴這裏:http://jsfiddle.net/9QtDw/6/

我希望它能幫助。

+0

謝謝!這有很大幫助。看起來你剛剛添加了e.preventDefault();在點擊功能上。 – lawlessmedia

+0

我只是調整了填充字段值的位置,用戶需要選擇數據,然後單擊鏈接填充字段。 http://jsfiddle.net/9QtDw/7/ 我感謝您的幫助。 – lawlessmedia

0

你不循環! 雅只是循環了2次 你應該改變你的循環功能是這樣的:

function loop(y) { 
i = y; 
if (i >= fieldnames.length) { // check to see if loop has run through the number of elements in the fieldnames array 
    return; 
else 
$("#text-submit").trigger('click') 
}