2012-12-04 44 views
0

我有显示文件上传到服务器上的某个功能:如何识别哪个文件正在使用事件?

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

进步功能是循环,并为每个文件执行一次。 正在进行的功能我想写出多少百分比上传,我可以做一个文件,但如果我上传不是一个文件,那么我不知道如何为每个文件取得进展。 我可以将循环的参数添加到进度函数吗?

回答

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

P. S.对不起,我的第一个anwser错了,我已经删除了它。

+0

спасибо)但我可以做到这一点没有匿名功能? – iamart

+0

什么?如果在闭包中定义_progress_函数,它将有权访问父上下文(_xhr_和_file_变量)。但我认为在一般情况下这不是一个好主意:在每次循环迭代中,都会在内存中创建新函数。 Пожалуйста:) –