1

私は次のjQueryループを持っていますが、各ループアクション内にはユーザーの操作があり、コードはユーザーの操作が完了するまで待機する必要があります。ループを一時停止する可能性はありますか、それとも他の方法でそれを実現することは可能ですか?

jQuery.each([345, 897, 345 /* ... */], function(index, value) {
    // User interaction, need to wait the user finishing/answer

    // Here is a jQuery UI dialog with an input field in it
    // After the user entered their value and hit the submit button
    // which fires an own callback which could also continue the loop somehow?
});
4

3 に答える 3

3

これを放棄して自分で処理する必要がありeachます。1つのオプションは次のようになります。

var curIndex = 0;
var ids = [345, 897, 345 /* ... */];

function doNext(){

  // check curIndex here to make sure you haven't completed the list, etc.

  var id = ids[curIndex++];

  // do stuff with this id
}

// THIS IS SOME SORT OF CODE EXECUTED WHEN THE "USER INTERACTION" FINISHES
function interactionDone(){
   doNext();
}
于 2012-05-01T20:59:34.680 に答える
1

JavaScript はシングル スレッドであるため、各ループに入れることができる唯一のユーザー アクションは、 または のいずれalertconfirmです。これらが要件を満たしていない場合は、各ループを自分で処理する必要があります。例えば:

//assume foo = [345, 897, 345 /* ... */]
var i = 0;
function handleNextFoo() {
    i++;
    if(i < foo.length) {
        //Do something with foo[i]
        //now we wait for use action to call the callbackFromUserAction()
    }
}
function callbackFromUserAction() {
    //Handle user action
    handleNextFoo();
}

免責事項: 製品の命名規則を処理して、変数のスコープを設定し、変数をより使いやすくする必要があります。

于 2012-05-01T21:03:00.047 に答える
0

簡単なイテレータ オブジェクトを作成するだけで、配列を簡単に処理できます。

var iterator = function(array) {
    this.array = array;
    this.len = array.length;
    this.index = 0;
    return this;
};

iterator.prototype.next = function(callback) {
    callback.call(null, this.array[this.index]);
    this.index++;
    if (this.index == this.len) this.onend.call(null, this.array);
    return this;
};

iterator.prototype.onend = function() {
    alert('done');
};

var iterate = new iterator(arr);

iterate.next(function(val) {
    console.log(val);
});

ここにデモがありますhttp://jsfiddle.net/KfrVN/1/

しかし、それ以外の場合はDMosesが指摘したように、アラート/確認のみがループを停止できます。これらはJavaScriptのユーザーアクションであるため、独自の方法を繰り返すことが唯一のアプローチです。

于 2012-05-01T21:15:19.020 に答える