我找到了有关如何在提交文件上传表单时添加附加表单数据的解决方案。这个问题是如果没有要上传的文件,如何上传附加数据。
我在任务管理应用程序中使用 blueimp jquery-file-upload 来拖放文件并将其附加到任务。
该脚本已初始化并设置为在附加文件时不自动上传。上fileuploadadd
我附上回调data.submit()
to my submit
事件处理程序。这样我们就可以在一个 POST 请求中提交任务数据和文件。
在添加文件之前,我无法访问文件上传data
使用data.submit()
功能。我想出了一个解决方法,在页面加载时添加一个空文件(然后删除它),这将触发绑定data.submit()
到提交按钮。问题是插件在尝试循环空文件数组时返回错误。如果您添加了一个文件,然后在提交表单之前将其删除,也会出现此问题。
一段时间以来,我一直在寻找解决方案,并且四处寻找,但在(恕我直言)糟糕的文档中找不到任何内容。
看看我下面的代码:
$('#post_task').fileupload({
autoUpload: false,
singleFileUploads: false,
disableImagePreview: true,
}).on('fileuploadadd', function (e, data) {
$.each(data.files, function (index, file) {
var filename = file.name,
filesize = bytesToSize(file.size)
ext = filename.substr(filename.lastIndexOf('.')+1,5),
icon = '<i class="sprite_file sprite_file-file_extension_'+ext+'"></i>',
node = $('<li/>').append($('<span/>').html(icon + filename + ' ' + filesize + '<a href="#">×</a>')).attr('data-index',index);
node.find('a').click(function(e){
e.preventDefault();
var $self = $(this),
$listItem = $self.parents('li'),
listIndex = $listItem.attr('data-index');
$listItem.remove();
$('#files li').attr('data-index',function(index){return index;});
data.files.splice(listIndex,listIndex);
console.log(data);
vardata = data;
});
$('#files').append(node);
});
$('#post_task').unbind('submit').submit(function(ev){
ev.preventDefault();
data.submit();
});
});