Javascript 使用Html5上传多个文件的进度条

Javascript 使用Html5上传多个文件的进度条,javascript,ajax,file-upload,Javascript,Ajax,File Upload,使用进度事件时,我可以为一个上载请求更新进度栏: function uploadFile(file) { fileid=md5(file.name); if {xhr[fileid] ;== undefined} { xhr[fileid] = new XMLHttpRequest(); xhr[fileid].open('POST',' {% url upload %}', true); xhr[fileid].setRequestHeader(

使用进度事件时,我可以为一个上载请求更新进度栏:

function uploadFile(file) {
fileid=md5(file.name);
if {xhr[fileid] ;== undefined} {
        xhr[fileid] = new XMLHttpRequest();
        xhr[fileid].open('POST',' {% url upload %}', true);
        xhr[fileid].setRequestHeader("X-File-Name", file.name);
        xhr[fileid].setRequestHeader("X-File-id", fileid);
        xhr[fileid].upload.addEventListener('progress', onprogressHandler, false);
        xhr[fileid].upload.addEventListener('load',oncompleteHandler,false);
        xhr[fileid].send(file);
}

      function onprogressHandler(event) {
            var percent = event.loaded/event.total*100;
            var $target = $(event.target);
            console.log(uploadHolder[fileid]);
            uploadHolder[fileid].find(".upload-completed").css('width',percent+'%');
            console.log('Upload progress: ' + percent + '%');
        }
但是,当我同时发送两个以上的文件上传请求时,只有最后一个文件的进度条会被更改。 如何确定事件附加到哪个文件上载请求

更新:
如果我将fileid声明为uploadFile的局部变量,比如var fileid,那么我无法在事件处理程序中访问fileid。在事件处理程序中使用“this”可以得到XMLHttpRequestUpload对象

您应该寻找javascript的“闭包”概念。然后你就会明白错误了。我认为这个概念非常重要,你应该学习:)

你可以通过
event.currentTarget.files[n]
查看文件详细信息,如果有帮助的话?()。如果上述代码不起作用,可能是因为
fileid
的范围没有得到正确管理,并且正在重置为最后一个id(例如,在
for
循环中)。如果是这种情况,您的问题不在显示的代码范围内-您能否显示一次加载多个文件的代码?