【发布时间】:2011-10-07 09:50:33
【问题描述】:
我正在通过 XmlHTTPRequest 和 HTML5 上传多个文件。我的上传工作正常,但我希望每个文件上传都有一个进度条。但是,我拥有的代码对所有文件上传使用最后一个进度条,而不是每次上传都使用自己的进度条。所以这在客户端主要是可视的,但这真的让我很烦。出于某种原因,我假设附加文件上传进度的事件会覆盖自身并使用最后一个进度条。这是我的代码:
var files = event.dataTransfer.files;
// iterate over each file to upload, send a request, and attach progress event
for (var i = 0, file; file = files[i]; i++) {
var li = $("<li>" + file.name + "<div class='progressbar'></div></li>");
// add the LI to the list of uploading files
$("#uploads").append(li);
// fade in the LI instead of just showing it
li.hide().fadeIn();
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', function(e) {
var percent = parseInt(e.loaded / e.total * 100);
li.find(".progressbar").width(percent);
}, false);
// check when the upload is finished
xhr.onreadystatechange = stateChange;
// setup and send the file
xhr.open('POST', '/attachments', true);
xhr.setRequestHeader('X-FILE-NAME', file.name);
xhr.send(file);
}
我假设正确的“li”没有被“progress”事件正确读取。我怀疑我必须做某种绑定来告诉“进度”事件使用特定变量,因为它是“li”,但我不确定我错过了什么。
【问题讨论】:
标签: html file-upload progress-bar