【发布时间】:2014-02-06 21:15:46
【问题描述】:
要点:如何重置 blueimp jQuery 文件上传插件,使其认为尚未上传任何文件?
我的场景
- 我有一个只允许上传一个文件的上传表单。
- 上传该文件后,将对其进行分析。此时,用户可以选择单击“取消”按钮,在此我重置视图模型的其余部分。
- 当用户单击取消时,我想重置用户上传的文件数,因为它们基本上是从新开始的。
- 我仍然希望在重置后最多应用一个文件。
目前发生了什么
- 上传文件
- 点击取消按钮,一切重置(即我重新初始化文件上传控件)
- 尝试上传文件,但仍被告知已达到最大文件数。
我的尝试
我尝试调用 fileupload('destroy') 然后重新初始化,但这似乎没有结果(我希望销毁也会取消对实例的跟踪)。
我的问题:
- 像从头开始一样销毁/重新初始化/重置上传控件的最佳方法是什么?
- 如果没有,有没有办法以编程方式让 blueimp 认为已经上传了零个文件,从而有效地重置它? 提前感谢您提供的任何帮助!
版本说明:
仅供参考,我使用的是 v8.8.1 -- 我不想升级,因为一位同事以特定方式更改了一些代码 -- 呃。我们计划在预定日期删除此自定义和升级。如果我必须更新以解决此问题,请随时告诉我,因为这是完全公平的。
更新:一些代码
页面第一个文件上传控件:
<form id="summaryFileUploadForm" action="/api/InvoiceDetailsFile/PostForProcessing" method="POST"
enctype="multipart/form-data" data-bind="disableFileUpload: InvoiceHasSummaryDocument() || (!InvoiceDataIsFilledIn())">
<div class="fileupload-buttonbar">
<div class="fileupload-buttons">
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="fileinput-button">
<span>Add files...</span>
<input id="file" type="file" name="file" />
</span>
<span class="fileupload-loading"></span>
</div>
<!-- The global progress information -->
<div class="fileupload-progress fade" style="display: none">
<!-- The global progress bar -->
<div class="progress" role="progressbar" aria-valuemin="0" aria-valuemax="100"></div>
<!-- The extended global progress information -->
<div class="progress-extended"> </div>
</div>
</div>
<div data-bind="fadeVisible: InvoiceHasSummaryDocument()">
<span class="ui-icon ui-icon-check float-left"></span><span>A summary document has been uploaded.</span>
</div>
<span data-bind="fadeVisible: (!InvoiceDataIsFilledIn())">Please fill out invoice information before uploading a file.</span>
<!-- The table listing the files available for upload/download -->
<table role="presentation">
<tbody class="files" id="Tbody1"></tbody>
</table>
<script id="summaryFileDownloadTemplate" type="text/x-tmpl">
</script>
</form>
页面上的第二个文件上传控件:
<form id="detailsFileUploadForm" action="/api/InvoiceDetailsFile/PostForProcessing" method="POST"
enctype="multipart/form-data" data-bind="disableFileUpload: Invoice().DetailItems().length > 0 || (!InvoiceHasSummaryDocument())">
<div class="fileupload-buttonbar">
<div class="fileupload-buttons">
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="fileinput-button">
<span>Add files...</span>
<input id="file" type="file" name="file" />
</span>
<span class="fileupload-loading"></span>
</div>
<!-- The global progress information -->
<div class="fileupload-progress fade" style="display: none">
<!-- The global progress bar -->
<div class="progress" role="progressbar" aria-valuemin="0" aria-valuemax="100"></div>
<!-- The extended global progress information -->
<div class="progress-extended"> </div>
</div>
</div>
<span><strong>NOTE: </strong>Only Excel 2007+ (.xlsx) files are accepted. <a href="<%= ResolveUrl("~/asset/xlsx/Ligado_InvoiceUploadTemplate_Standard.xlsx") %>" target="_blank" id="A1">Need a blank Invoice Upload template?</a><br />
</span>
<span data-bind="fadeVisible: Invoice().DetailItems().length > 0">Invoice details have been uploaded.</span>
<span data-bind="fadeVisible: (!InvoiceHasSummaryDocument())">Please upload a summary file prior to uploading a details file.</span>
<!-- The table listing the files available for upload/download -->
<table role="presentation">
<tbody class="files" id="fileList"></tbody>
</table>
<script id="template-upload" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-upload fade" style="display:none">
<td>
<span class="preview"></span>
</td>
<td>
<p class="name">{%=file.name%}</p>
{% if (file.error) { %}
<div><span class="error">Error:</span> {%=file.error%}</div>
{% } %}
</td>
<td>
<p class="size">{%=o.formatFileSize(file.size)%}</p>
{% if (!o.files.error) { %}
<div class="progress" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"></div>
{% } %}
</td>
<td>
{% if (!o.files.error && !i && !o.options.autoUpload) { %}
<button class="start">Start</button>
{% } %}
{% if (!i) { %}
<button class="cancel">Cancel</button>
{% } %}
</td>
</tr>
{% } %}
</script>
<script id="template-download" type="text/x-tmpl">
</script>
</form>
我可以使用以下方法清除第一个控件:
$("tbody.files").empty();
大概是因为那个时候文件已经上传了(这很好)。
但是,这不适用于第二种形式。我试过了:
$("#detailsFileUploadForm").find('.cancel').click();
这会使项目从页面上消失,但在添加其他文件时它们会重新出现。
我也试过$("#detailsFileUploadForm").fileupload('destroy'),但没有成功(大概是因为它不处理这些功能,更多的是关于绑定。
【问题讨论】:
-
你使用它的ui小部件吗?它检查附加元素的数量,每个元素将所选文件存储在自己的数据集中。
-
@BlackSheep 感谢您的回复!这听起来肯定是在正确的轨道上。当您说附加元素时,您的确切意思是什么?从作为上传模板的表中删除文件的行是否足够?
-
几个月前我曾将该插件用于应用程序,据我所知,删除
fileContainer的子项将删除所有选定的文件。 -
.data('data');的每个元素都指向所选文件。 -
只是为了确认一下,当你说“fileContainer”时,你的意思是我最初调用
fileupload()的元素?
标签: javascript jquery file-upload blueimp