0

我有一个显示将文件上传到服务器的进度的功能:

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

progress 函数在for循环中,对每个文件执行一次。进行中功能我想写上传了多少百分比,我可以为一个文件做,但如果我不上传一个文件,那么我不知道如何为每个文件取得进展。我可以在进度函数中添加循环参数吗?

4

1 回答 1

1

您可以使用匿名函数为进度函数提供附加参数:

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 回答