Buz*_*zut 3 javascript jquery file-upload xmlhttprequest progress-bar
我通过输入类型="文件"和XHR请求上传文件.上传进行得很顺利.问题是,我无法使用onprogress更新我的进度条.如果我只上传一个文件,它运行良好,但由于不止一个,只有一个进度条正在更新,其他只是不工作.它可能来自for循环,但我不知道如何我可以解决这个问题如果有人有想法,那就太好了!
这是代码:
$('input').change(function() {
var allowedTypes = ['png', 'jpg', 'jpeg', 'gif'];
var filesLen = this.files.length;
var fileInput = document.querySelector('#file');
for (i = 0; i < filesLen; i++)
{
var vidType = this.files[i].name.split('.');
if (allowedTypes.indexOf(vidType[vidType.length -1].toLowerCase()) != -1)
{
var progress = 'progress' + i;
$('input').before('<p>' + this.files[i].name + ' <progress id="' + progress + '"></progress></p>');
var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload/');
xhr.upload.onprogress = function(e)
{
$('#' + progress).attr('value', e.loaded);
$('#' + progress).attr('max', e.total);
};
xhr.onload = function()
{
console.log('upload complete');
};
var form = new FormData();
form.append('title', this.files[i].name);
form.append('pict', fileInput.files[i]);
xhr.send(form);
}
else
{
alert('Your file "' + this.files[i].name + '" \'s format isn\'t supported');
}
}
Run Code Online (Sandbox Code Playgroud)
这是"臭名昭着的循环问题".
问题出在这里:
xhr.upload.onprogress = function(e)
{
$('#' + progress).attr('value', e.loaded);
$('#' + progress).attr('max', e.total);
};
Run Code Online (Sandbox Code Playgroud)
当这个函数运行时,progress它将是循环退出时的任何内容,而不是循环中定义函数的位置.尝试使用以下内容替换该代码:
(function(progress) {
xhr.upload.onprogress = function(e)
{
$('#' + progress).attr('value', e.loaded);
$('#' + progress).attr('max', e.total);
};
}(progress));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5289 次 |
| 最近记录: |