0

我在 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 变量。

4

1 回答 1

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
});

使用 by 调用的函数each也会为所需的 Name 值创建一个范围。

于 2013-04-06T15:16:32.753 回答