0

フォーム フィールドにデータを入力し、javascript の再帰ループを使用してユーザーにプロンプ​​トを表示しています。

再帰が期待どおりに機能しないという問題があります。

ユーザーに 6 つの入力フィールドを求める再帰ループがあります。

field1 と field2 は期待どおりに入力されますが、field3 と field4 は同時に発火し、field5 と field6 は同時に発火します。

グローバル変数とローカル変数、または loop() 関数内のスコープに関係があると思いますが、それを理解するのに苦労しています。

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

[データを保存] ボタンをクリックしてループを起動すると、 loop() 関数が繰り返され、ユーザーをガイドする確認ポップアップが表示されます。

私を正しい方向に向ける助けは大歓迎です。

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);
}
4

2 に答える 2

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/

お役に立てば幸いです。

于 2013-08-28T18:50:25.903 に答える
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')
}
于 2013-08-28T18:31:59.003 に答える