0

サーバーへのファイルのアップロードの進行状況を表示する機能があります。

function progress(event) {
...
}
...
for (var i = 0; i<files.length; i++) {
    xhr.upload.onprogress = progress;
}

プログレス関数はforループにあり、ファイルごとに 1 回実行されます。進行中の関数何パーセントアップロードされたかを書きたいのですが、1つのファイルに対してそれを行うことができますが、1つのファイルをアップロードしないと、すべてのファイルの進行状況がわかりません。loop to progress 関数のパラメータを追加できますか?

4

1 に答える 1

1

匿名関数を使用して、progress関数に追加のパラメーターを与えることができます。

function progress(event, file) {
   ...
}

for (var i = 0; i<files.length; i++) {
    xhr.upload.onprogress = function(event) {
        progress(event, files[i]);
    }
}

ただし、進行状況は毎回最後のファイル項目を取得するため、このコードは機能しません。それを避けるには、クロージャーを使用する必要があります。

function progress(event, file) {
    ...
}

for (var i = 0; i<files.length; i++) {
    (function(xhr, file) {
        xhr.upload.onprogress = function(event) {
            progress(event, file);
        }
    })(xhr, files[i]);
}

PS 申し訳ありませんが、最初のアンサーが間違っていたので、削除しました。

于 2012-12-04T07:33:12.907 に答える