reader.readasdataurl не работает для цикла javascript jquery - PullRequest
0 голосов
/ 04 февраля 2019

По моему требованию все загруженные файлы должны быть преобразованы в формат base64 и помещать их значения в один объект.Иногда я получал правильный вывод, иногда я не получал значение, которое отправляет пустое значение.Ниже мой код.

var fileControls = $('input[type="file"]');
var FilesObj = [];
for (var a = 0; a < fileControls.length; a++) {
    var files = fileControls[a].files;
    if (files.length > 0) {
        var sdd = fileControls[a].files[0];
        var reader = new FileReader();
        var Obj1 = new Object();
        // $(e.target).attr('id')
        reader.readAsDataURL(sdd);
        reader.onloadend = function (x,y) {
            Obj1.Key = x;
            // reader.readAsDataURL(y);
            var valRes = y.result;
            Obj1.Value = valRes;
            FilesObj.push(Obj1);
        }
        reader.onloadend(fileControls[a].id, reader);
    }
}

1 Ответ

0 голосов
/ 04 февраля 2019

Вместо этого вы можете использовать onload событие с параметром.

var FilesObj=[]; 
function GetFiles(){
var fileControls = $('input[type="file"]');
            for (var a = 0; a < fileControls.length; a++) {
                var files = fileControls[a].files;
                if (files.length > 0) {
                    var file = fileControls[a].files[0];
                    var reader = new FileReader();
                    var Obj1 = new Object();
                    // $(e.target).attr('id')
                    reader.readAsDataURL(file);                 
                    reader.onload = (function(f,id) {
                    return function(e) {
                    // Here you can use `e.target.result` or `this.result`
                    // `f.id`and `f.name`.
                     Obj1.Key = id;
                                var valRes = this.result;
                                Obj1.Value = valRes;
                                FilesObj.push(Obj1);
                    };
                })(file,fileControls[a].id);
               }
            }
    }
    
    function ViewFiles (){
    $.each(FilesObj,function(i,obj){
    var $img = $("<img>").prop("id","img"+obj.Key).attr("src",obj.Value).prop("width","100").prop("height","100");
    $("#divImages").append($img);
    });
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<input type="file" id="file1">
<input type="file" id="file2">
<input type="file" id="file3">
<input type="file" id="file4">
<input type="file" id="file5">
<br>
<br>
<br>

<button type="button" onclick="GetFiles()">Get Files</button>
<button type="button" onclick="ViewFiles()">View Files</button>

<br>
<br>
<div id="divImages"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...