JavaScript foreach每次给我相同的值
我有一个JavaScript的foreach函数一次上传多个文件,并显示他们在一个div与他们的百分比上传。我的问题,我只是现在测试,我做了一个变量,以获得输入中的每个文件的名称,但有一个输入中有多个文件,所以我提醒我所做的变量获取文件的名称,但我得到了惊动每次最后一个文件。下面是我的代码。JavaScript foreach每次给我相同的值
$('#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变量。
这是因为您的变量Name
具有调用回调时的循环结束值。
可以保护这个变量,但立即打电话功能:
(function(Name){
Request.upload.addEventListener('progress', function(event) {
if(event.lengthComputable){
var Percent = event.loaded/event.total;
alert(Name);
}
});
})(Name);
这中间函数创建,其中新名称变量被保护的范围。另外,如果你需要其他的变量,你可以声明一个围绕整个循环内容的函数,其中I
。
你也可以使用了jQuery的each
:
$.each(this.files, function(I) {
// the content of your loop
});
的使用功能由each
叫也创造了名的所需值的范围。
工作,但它现在警报相同名称两次,然后移动到下一个名称并提醒两次,等等...... – 2013-04-06 15:19:45
@MoussaHarajli这很正常:[进度事件](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress)可以很好地发送多次。 – 2013-04-06 15:23:23
好的,谢谢! – 2013-04-06 15:25:10
你没有使用foreach循环。 – 2013-04-06 15:18:41
你的变量'I'目前隐含地是全局的。你可能应该在循环之上使用'var I;'声明它。 – jwueller 2013-04-06 15:20:29
可能重复[Javascript闭合内部循环 - 简单实用的例子](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Bergi 2013-04-06 15:24:17