php - Javascript foreach 每次都给我相同的值

标签 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 变量。

最佳答案

这是因为调用回调时,变量 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 值创建一个范围。

关于php - Javascript foreach 每次都给我相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15852563/

相关文章:

jquery - 如何使用 jQuery 操作 JSON 多维数组

php - 批量插入防止循环插入 codeigniter

php - MongoDB 和 PHP 框架

javascript - 选择selectpicker选项后如何选中复选框?

javascript - 加载微调器不适用于 Angularjs 中的 ng-click 或 ng-change

javascript - 简单的 Webpack + React + ES6 + babel 示例不起作用。意外的 token 错误

javascript - Firebase 'set' 函数删除整个节点

php - 从数据库php mysql搜索日期范围

jQuery 拖放在 Chrome 中只拖放一次

javascript - 根据更改事件填充选择下拉列表