我有一个显示将文件上传到服务器的进度的功能:
function progress(event) {
...
}
...
for (var i = 0; i<files.length; i++) {
xhr.upload.onprogress = progress;
}
progress 函数在for循环中,对每个文件执行一次。进行中功能我想写上传了多少百分比,我可以为一个文件做,但如果我不上传一个文件,那么我不知道如何为每个文件取得进展。我可以在进度函数中添加循环参数吗?
我有一个显示将文件上传到服务器的进度的功能:
function progress(event) {
...
}
...
for (var i = 0; i<files.length; i++) {
xhr.upload.onprogress = progress;
}
progress 函数在for循环中,对每个文件执行一次。进行中功能我想写上传了多少百分比,我可以为一个文件做,但如果我不上传一个文件,那么我不知道如何为每个文件取得进展。我可以在进度函数中添加循环参数吗?
您可以使用匿名函数为进度函数提供附加参数:
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对不起,我的第一个答案是错误的,我已将其删除。