Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here's how I've done it. It is more code initially but makes sense. You can place as many uploaders on one page as you want.</p> <pre><code>if (self.settings.businessAddresses !== null) { $.each(self.settings.businessAddresses, function (index, businessAddress) { initFileUploader(self.settings.privateAddresses.length + index, businessAddress, "business", self.settings.allowedExtensions); }); } </code></pre> <p>Here's implementation of 'generic' file uploader initializer. Mind you it is Fine Uploader 2.1.2 i am using. It should be easier in new version i suppose. I have extensions.js to go with it to support separate parameters for each individual file too and some other improvements which probably have been addressed in new version of file uploader.</p> <pre><code>// initiate uploader function initFileUploader(index, addressInstance, addressType, allowedFileExtensions) { var filesCount = 0; var uploadButtonSelector = '#triggerUpload-' + addressInstance.Id; var fileSelectButton = ".qq-upload-button-" + addressInstance.Id; var uploadedFilesErrorSelector = '#uploadedFilesError-' + addressInstance.Id; var nextButtonSelector = "#Next"; var previousButtonSelector = "#Previous"; var documentTypeSelector = "#DocumentTypeCode-" + addressInstance.Id; var prospectCacheKeySelector = "#ProspectCacheKey"; // Set up the upload API var fileUploader = new qq.FileUploader({ element: $('#filesToUpload-' + addressInstance.Id)[0], action: '/FileUploader', autoUpload: false, uploadButtonText: 'Select a file', allowedExtensions: allowedFileExtensions, sizeLimit: 1048576, // 1 MB = 1024 * 1024 bytes, template: '&lt;div class="qq-uploader"&gt;' + // Allow the boostrap styles '&lt;div class="qq-upload-button-' + addressInstance.Id + ' btn btn-success" style="width: 100px"&gt;{uploadButtonText}&lt;/div&gt;' + '&lt;ul class="qq-upload-list-' + addressInstance.Id + '" style="margin-top: 10px; text-align: center;"&gt;&lt;/ul&gt;' + '&lt;pre class="qq-upload-drop-area-' + addressInstance.Id + '"&gt;&lt;span&gt;{dragText}&lt;/span&gt;&lt;/pre&gt;' + '&lt;/div&gt;', failUploadText: '', fileTemplate: '&lt;li&gt;' + '&lt;span class="qq-document-type-' + addressInstance.Id + '"&gt;&lt;/span&gt;' + '&lt;span class="qq-upload-file-' + addressInstance.Id + '"&gt;10870&lt;/span&gt;' + '&lt;a class="qq-upload-cancel-' + addressInstance.Id + '" href="#"&gt; Remove&lt;/a&gt;' + '&lt;div class="qq-progress-bar-' + addressInstance.Id + '"&gt;&lt;/div&gt;' + '&lt;span class="qq-upload-spinner-' + addressInstance.Id + '" style="display: none;"&gt;&lt;/span&gt;' + '&lt;span class="qq-upload-finished-' + addressInstance.Id + '"&gt;&lt;/span&gt;' + '&lt;span class="qq-upload-size-' + addressInstance.Id + '" style="display: none;"&gt;&lt;/span&gt;' + '&lt;span class="qq-upload-failed-text-' + addressInstance.Id + '"&gt;&lt;/span&gt;' + '&lt;/li&gt;', classes: { button: 'qq-upload-button-' + addressInstance.Id + '', drop: 'qq-upload-drop-area-' + addressInstance.Id + '', dropActive: 'qq-upload-drop-area-active-' + addressInstance.Id + '', dropDisabled: 'qq-upload-drop-area-disabled-' + addressInstance.Id + '', list: 'qq-upload-list-' + addressInstance.Id + '', progressBar: 'qq-progress-bar-' + addressInstance.Id + '', file: 'qq-upload-file-' + addressInstance.Id + '', documentType: 'qq-document-type-' + addressInstance.Id + '', applicationId: 'qq-application-id-' + addressInstance.Id + '', addressId: 'qq-address-id-' + addressInstance.Id + '', addressType: 'qq-address-type-' + addressInstance.Id + '', spinner: 'qq-upload-spinner-' + addressInstance.Id + '', finished: 'qq-upload-finished-' + addressInstance.Id + '', size: 'qq-upload-size-' + addressInstance.Id + '', cancel: 'qq-upload-cancel-' + addressInstance.Id + '', failText: 'qq-upload-failed-text-' + addressInstance.Id + '', success: 'alert-success', fail: 'alert-error', successIcon: null, failIcon: null }, onError: function (id, fileName, errorReason) { alert(errorReason); }, onComplete: function (id, fileName, response) { filesCount--; if (response.success) { $('&lt;input&gt;').attr({ type: 'hidden', name: 'UploadedFileIds', value: response.cacheKey }).appendTo('form'); } // Check that we have finished downloading all files if (fileUploader.getInProgress() == 0) { // Re-enable the Next button $(nextButtonSelector).removeAttr('disabled'); $(previousButtonSelector).removeAttr('disabled'); $(uploadButtonSelector).css('visibility', 'hidden'); } }, onSubmit: function (id, fileName) { filesCount++; fileUploader._options.params[id] = { documentType: $("select" + documentTypeSelector)[0].value, documentTypeText: $("select" + documentTypeSelector)[0].options[$("select" + documentTypeSelector)[0].selectedIndex].text, addressId: addressInstance.Id, addressType: addressType, applicationId: addressInstance.ApplicationId, prospectCacheKey: $(prospectCacheKeySelector).val() }; // $(documentTypeSelector).prop('selectedIndex', 0); // $(fileSelectButton).attr('disabled', 'disabled'); // Show the upload button if ($(uploadButtonSelector).css('visibility') === 'hidden') { $(uploadButtonSelector).css('visibility', 'visible'); } // Hide the error for mandatory files upload $(uploadedFilesErrorSelector).css('display', 'none'); }, onCancel: function (id, fileName) { filesCount--; if (filesCount === 0) { $(uploadButtonSelector).css('visibility', 'hidden'); } } }); </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload