2013-04-06 90 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