使用AjaxForm以编程方式提交表单

时间:2010-03-25 18:57:35

标签: forms jquery-plugins uploader multifile

我想找到一种方法来上传单个文件*,在后台,让它在文件选择后自动启动,而不需要flash上​​传器,所以我试图使用两个很棒的机制(jQuery.Form和JQuery) MultiFile)在一起。我没有成功,但我很确定这是因为我遗漏了一些基本的东西。

只需使用MultiFile,我将表单定义如下......

<form id="photoForm" action="image.php" method="post" enctype="multipart/form-data">

文件输入按钮定义为...

<input id="photoButton" "name="sourceFile" class="photoButton max-1 accept-jpg" type="file">

Javascript就是......

$('#photoButton').MultiFile({
    afterFileSelect: function(){
         document.getElementById("photoForm").submit();
    }
});

这完美无缺。一旦用户选择单个文件,MultiFile就会将表单提交给服务器。


如果不是使用MultiFile,如上所示,假设我包含一个Submit按钮以及定义如下的JQuery Form插件......

 var options = {
  success: respondToUpload
 }; 

 $('#photoForm').ajaxForm(options);

......这也很完美。单击“提交”按钮后,表单将在后台上传。


我不知道该怎么办才能让这两者一起工作。如果我使用Javascript提交表单(如上面的MultiFile示例所示),表单已提交,但未调用JQuery.Form函数,因此表单不会在后台提交。

我想也许我需要更改表格注册如下......

$('#photoForm').submit(function() {
 $('#photoForm').ajaxForm(options);
});

......但这并没有解决问题。当我尝试.ajaxSubmit而不是.ajaxForm时也是如此。

我错过了什么?

  • BTW:我知道将MultiFile用于单个文件上传可能听起来很奇怪,但我们的想法是根据用户的帐户,文件数量将是动态的。所以,我从一个开始,但数字会根据条件而变化。

1 个答案:

答案 0 :(得分:1)

答案简直令人尴尬。

而不是使用...

以编程方式提交
document.getElementById("photoForm").submit();

......我用过......

$("#photoForm").submit();

另外,由于我只需要偶尔上传多个文件,我使用了更简单的技术......

1)表格与我原来的表格相同......

<form id="photoForm" action="image.php" method="post" enctype="multipart/form-data">

2)文件输入字段基本相同......

<input id="photoFile" "name="sourceFile" style="cursor:pointer;" type="file">

3)如果文件输入字段改变,则执行提交......

$("#photoFile").change(function() {
    $("#photoForm").submit();
});

4)AjaxForm监听器做了它的事情......

var options = {
    success: respondToUpload
}; 
$('#photoForm').ajaxForm(options);