Javascript foreach每次都给我相同的价值

时间:2013-04-06 15:14:12

标签: php javascript jquery ajax forms

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

1 个答案:

答案 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所需的值创建一个范围。