The gist: how can I reset a blueimp jQuery fileupload plugin so that it thinks no files have been uploaded already?
I tried calling fileupload('destroy') and then reinitializing, but that appeared to have no result (I was hoping that destroying would also tear down the tracking of the instance).
FYI, I am on v8.8.1 -- I would prefer not to upgrade because a colleague changed some of the code in a specific way -- ugh. We plan to remove this customization and upgrade but at a scheduled date. If I have to update to resolve this, feel free to let me know because that's completely fair.
The first file upload control on the page:
<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>
The second file upload control on the page:
<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>
I'm able to clear the first control using:
$("tbody.files").empty();
presumably because the file has already been uploaded at that point (which is fine).
However, this doesn't work for the second form. I have tried:
$("#detailsFileUploadForm").find('.cancel').click();
This makes the items disappear from the page, but they reappear when an additional file is added.
I have also tried $("#detailsFileUploadForm").fileupload('destroy')
with no success (presumably because it does not handle these functions and is more about bindings.
The answer to this was a lot simpler than I expected:
$("table tbody.files").empty();
Previously, I think I was doing too much -- attempting to destroy/reset the container didn't work as well.
With this one line of code, the lists appear to reset and all is working well as far as I can tell.