我<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/