6

HTML5 ファイル API を使用してバイナリ ファイルを読み取っています。ユーザーは複数のファイルを選択し、ボタンをクリックしてそれらを JavaScript オブジェクトにコピーできます。私のコードはここにリストされています:

   <script>         
     var data = new Object;
     function ReadFiles()
     {
         var files = document.getElementById('file').files;
         for (var i = 0; i < files.length; i++) {
             var reader = new FileReader();
             reader.onloadend = function (evt) {
                 if (evt.target.readyState == FileReader.DONE) {
                     data["File_Content" + i] = btoa(evt.target.result);
                 }
             };
             reader.readAsBinaryString(files[i]);
         }
     }
   </script>
   <input type="file" id="file" name="file[]" multiple />
   <button onclick="ReadFiles();">Read Files</button>

ユーザーが 3 つのファイルを入力すると、無効なプロパティ 'File_Content3' のみが値を持つ 'data' オブジェクトに追加されます。他の 3 つの有効なプロパティ「File_Content0」、「File_Content1」、および「File_Content2」は作成されません。

誰でも問題を解決できますか?ありがとう。

4

1 に答える 1

11

変数にクローズの問題がありiます。別の変数を使用するだけです

     var j = 0, k = files.length;
     for (var i = 0; i < k; i++) {
         var reader = new FileReader();
         reader.onloadend = function (evt) {
             if (evt.target.readyState == FileReader.DONE) {
                 data["File_Content" + j] = btoa(evt.target.result);
                 j++;
                 if (j == k){
                     alert('All files read');
                 }
             }
         };
         reader.readAsBinaryString(files[i]);
     }
于 2013-07-26T05:03:06.107 に答える