アプリで複数ファイルのアップロード フィールドを使用しています<input name="filesToUpload" id="filesToUpload" type="file" multiple />
。
私が達成したいのは、ユーザーが選択したファイルをリストし、リスト内のファイルを削除できるようにすることです。最後に、フォームが送信されると、FormData
オブジェクトを使用して AJAX 経由でデータ全体をバイナリとして送信します。
削除部分を除いて、すべてうまく機能します。
属性が読み取り専用であることはわかっているFileList
ので、隠し入力フィールドの値としてファイルを配布しli
、ファイル名をリストするそれぞれの場所に追加しました。そのため、ユーザーが項目を削除するli
と、非表示の入力フィールドも一緒に削除され、最後に残りの項目をすべてFormData
オブジェクトに追加して収集します。
問題は、ファイルを非表示の入力に値として割り当てようとするたびに、奇妙な結果が得られたことです。
私のコードは次のようなものです:
listFiles : function () {
var file, files, filesList, filesLength, read;
files = this.files;
filesList = $('.files');
filesLength = files.length;
// Clear the list
filesList.html('');
for ( var i = 0; i < filesLength; i++ ) {
file = files[i];
// This is to read the content of the file
read=new FileReader();
read.readAsBinaryString( file );
// When reading is finished
read.onloadend = function() {
filesList.append(
'<li>' +
'<span class="fileName">' + file.name + '</span>' +
'<a href="#" class="deleteAttachment">x</a>' +
'<input type="hidden" name="file[]" value="' + read.result +'"/>' +
'</li>');
}
}
}
最後のファイルからデータを取得するだけです。また、データがいたるところに印刷されるため、DOM が壊れています。
デモはこちら => http://jsfiddle.net/zKyXC/