我在javascript中有一个foreach函数,可以一次上传多个文件,并在div中显示它们的上传百分比。我的问题我现在只测试,我做了一个变量来获取输入中的每个文件的名称,但在一个输入中有多个文件,所以我提醒我做的变量获取文件的名称,但我收到警报每次都是最后一个文件以下是我的代码。
$('#File').change(function(event) {
for(I = 0; I < this.files.length; I++)
{
var Name = this.files[I].name;
var Type = this.files[I].type;
var Size = this.files[I].size;
var Add = '';
Add += '<div class="UploadLabel" style="width:60%;">'+Name+'</div>';
Add += '<div id="UpPer" class="UploadLabel" style="width:10%;">0%</div>';
Add += '<div class="UploadLabel" style="width:15%;">N/A</div>';
Add += '<div class="UploadLabel" style="width:15%;">'+Type+'</div>';
$('#UploadContent').append(Add);
var Data = new FormData();
Data.append('File[]', this.files[I]);
var Request = new XMLHttpRequest();
Request.upload.addEventListener('progress', function(event) {
if(event.lengthComputable)
{
var Percent = event.loaded / event.total;
alert(Name);
}
});
Request.open('POST', 'Upload/Upload.php');
Request.setRequestHeader('Cache-Control', 'no-cache');
Request.send(Data);
$('#UploadModal').fadeIn('fast');
}
});
查看进度函数,我提醒了Name变量。
答案 0 :(得分:3)
那是因为你的变量Name
在调用回调时具有循环结束的值。
您可以使用立即调用的函数保护此变量:
(function(Name){
Request.upload.addEventListener('progress', function(event) {
if(event.lengthComputable){
var Percent = event.loaded / event.total;
alert(Name);
}
});
})(Name);
此中间函数创建一个范围,其中新的Name变量受到保护。
或者,如果您需要其他变量,则可以声明一个函数在循环的整个内容周围使用I
。
你也可以使用jQuery each
:
$.each(this.files, function(I) {
// the content of your loop
});
使用each
调用的函数也会为Name所需的值创建一个范围。