2013-06-05 9 views
17

ユーザから与えられたcsvファイルを読み込む必要があります。ファイルは次のようにファイルのドロップを処理し、ドラッグ&ドロップのdiv、使用してページ/スクリプトに渡されます。FileReaderオンロードイベントにパラメータを渡す

function handleFileDrop(evt) { 
    evt.stopPropagation(); 
    evt.preventDefault(); 
    var files = evt.dataTransfer.files; // FileList object. 
    ... 
} 

は、私は、配列に変換したCSVライブラリと、各ファイルを解析する必要があるが、しかしまたI私は現在解析しているファイル名を追跡する必要があります。それぞれのファイルを解析するために使用するコードは次のとおりです。

for(var x = 0; x < files.length; x++){ 
    var currFile = files[x]; 
    var fileName = currFile.name; 
    var reader = new FileReader(); 
    reader.onload = (function(theFile){ 
     return function(e){ 
      var csvArr = CSV.csvToArray(e.target.result, ";", true); 
      console.log(csvArr); 
     }; 
    })(currFile); 
    reader.readAsText(currFile); 
} 

これまで、すべてがうまくいきました。私は必要なのもreader.onloadイベント、例えばにファイル名を渡すことです:

reader.onload = (function(theFile){ 
    return function(e){ 

     ***** I need to have fileName value HERE ***** 

    }; 
})(currFile); 

可能ですか?これどうやってするの?任意の助けを事前に感謝、宜しく

答えて

43

は、以下のことを試してみてください。

var reader = new FileReader(); 
reader.onload = (function(theFile){ 
    var fileName = theFile.name; 
    return function(e){ 
     console.log(fileName); 
     console.log(e.target.result); 
    }; 
})(currFile); 
reader.readAsText(currFile); 

をここでは、ファイルが外側メソッドに渡される新しいfileName変数ごとに作成しています。その変数に(クロージャのために)アクセスし、それを返す関数を作成しています。

+0

Genius!ありがとう、私はこれをやろうとしている私の髪を引っ張っていた。私は今閉鎖を理解し始めていると思う! – Fiver

+2

ファイル名とreader.resultの両方の値を取得する方法はありますか? – PatriceG

+0

コードの後に​​問題がありますが、 'theFile'はどこから来ますか? currFileがどこで定義されているのか分かりますが、 'theFile'とは何が関係していますか? – NiallJG

関連する問題