我正在使用blueint jquery.fileupload插件使用asp.net上传文件
我遇到的情况是,我有一个页面允许用户选择类别(下拉列表框),标题(对于上载文件-TextBox)和文件输入(由插件处理)。
插件:
https://github.com/i-e-b/jQueryFileUpload.Net
javascript / jquery:
$('#fileup').fileupload({
replaceFileInput: false,
formData: function (form) {
return [{ name: 'dcat', value: $('#ddlCats').val() }, { name: 'title', value: $('#txtTitle').val()}];
},
dataType: 'json',
url: '/_handlers/FileHandler.ashx',
add: function (e, data) {
var valid = true;
var re = /^.+\.((doc)|(xls)|(xlsx)|(docx)|(pdf)|(pts))$/i;
$.each(data.files, function (index, file) {
if (!re.test(file.name)) {
$('#uploaded').html('This file type is not supported');
valid = false;
}
});
if (valid)
data.submit();
},
done: function (e, data) {
$.each(data.result, function (index, file) {
$('#uploaded').html(file);
});
GetFiles($('#ddlCats').val())
},
error: function () {
alert('An error occured while uploading the document.');
}
});
的HTML:
<div id="fUpload">
<span style="font-weight:bold;">Yeni Belge:</span><br />
<table class="ktoeos">
<tr>
<td>Category:</td>
<td> <select id="ddlCats"></select></td>
</tr>
<tr>
<td>Document Description:</td>
<td><input type="text" id="txtTitle" /></td>
</tr>
<tr>
<td>Select Document:</td>
<td><input type="file" name="file" id="fileup" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" id="btnSubmit" value="Upload" /></td>
</tr>
</table>
<div id="uploaded"></div>
我的问题是,选择文件后,文件立即通过http处理程序上载。我可以处理它以提交其他表单数据,但是,我想在按钮提交上触发此事件,因为我需要进行一些验证。另外,用户可能希望先选择一个文件,然后再填写表单的其他部分,在这种情况下,由于在提交表单之前已提交表单,因此他/她无法执行此操作。
由于我不是一个非常好的javascript程序员,因此我不知道此功能是否已在插件随附的.js文件中提供(可能已经提供)。有什么需要改变或做什么的想法吗?
最佳答案
将文件添加到窗口小部件后,就会立即调用add
回调,因此您需要覆盖它以暂停上载,然后单击按钮启动它。
add: function (e, data) {
$("#btnSubmit").click(function () {
// validate file...
if(valid)
data.submit();
});
}
更新:该文档现在具有better example: