2013-04-06 93 views
2

我用jquery插件罰款上傳。 需要在上傳文件之前動態傳遞參數,因此,setParams()方法應該完成這項工作。我不能對異常的onsubmit回電:罰款上傳3.4和setParams

1)上傳聲明

function initUploader() { 
     var up = $('#BSUploader').fineUploader({ 
         multiple: true, 
         debug: true, 
         request: { 
          endpoint: '${request.contextPath}/quantum/uploadToS3', 
          //params: {'folderId':r } 
         }, 
         dragAndDrop: { 
          extraDropzones:[$('#filesContainer')], 

...

2)的onsubmit回調

... 
}).on('submit', function(event, id, name) { 
      var r = $("#curfolderid").val(); 
      alert(r); 
      up.setParams({'folderId':r}); 

3)錯誤登錄

[FineUploader] Caught exception in 'onSubmit' callback - Object [object Object] has no method 'setParams' bundle-bundle_uploader_defer.js:4 
qq.log bundle-bundle_uploader_defer.js:4 
qq.FineUploaderBasic.log bundle-bundle_uploader_defer.js:26 
b bundle-bundle_uploader_defer.js:47 
a._options.callbacks.(anonymous function) bundle-bundle_uploader_defer.js:47 
qq.FineUploaderBasic._upload bundle-bundle_uploader_defer.js:43 
qq.FineUploaderBasic._uploadFileOrBlobDataList bundle-bundle_uploader_defer.js:43 
qq.FineUploaderBasic.addFiles bundle-bundle_uploader_defer.js:29 
qq.DragAndDrop.callbacks.dropProcessing bundle-bundle_uploader_defer.js:69 
b bundle-bundle_uploader_defer.js:51 
qq.UploadDropZone.onDrop bundle-bundle_uploader_defer.js:52 
(anonymous function) 

任何想法?

回答

7

您沒有正確使用jQuery插件包裝。 documentation on this plugin清楚地說明了在使用插件時如何調用API方法。您應該確實按照從the first page開始的自述文件,然後按照您的預期用途列出的路徑進行操作。這樣做可以防止您遇到通過熟悉圖書館而解決的問題。

現在,就來修復您的問題...

您創建指定代表與「BSUploader」的ID元素一個jQuery對象的up變量。你正試圖調用這個jQuery對象中不存在的函數。 Fine Uploader不會用其他方法污染jQuery對象。在開發插件包裝時,遵循了jQuery網站上概述的所有接受/推薦的標準。這意味着您必須在插件實例的上下文中調用API方法。

所以,你必須改變這一行:
up.setParams({'folderId':r});

這樣:
up.fineUploader('setParams', {'folderId':r});

另一種選擇是完全消除up變量。你真的不需要它,因爲你可以在你的回調處理器中調用setParams這樣的:
$(this).fineUploader('setParams', {'folderId':r});

+0

嗨雷,感謝您的支持。我將基本的上傳器轉換爲JQuery插件,並立即清理代碼。乾杯。 – 2013-04-06 21:33:16