代码之家  ›  专栏  ›  技术社区  ›  Alan M.

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

  •  2
  • Alan M.  · 技术社区  · 16 年前

    我想找到一种上传单个文件的方法*,在后台,让它在文件选择后自动启动,而不需要闪存上传器,所以我试图同时使用两种伟大的机制(jquery.form和jquery multipile)。我还没有成功,但我很确定这是因为我遗漏了一些基本的东西。

    只是使用多文件,我定义的形式如下…

    <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();
        }
    });
    

    这很管用。一旦用户选择一个文件,多文件就会将表单提交给服务器。


    如果不使用多文件(如上图所示),那么假设我包含一个提交按钮和jquery表单插件,定义如下…

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

    …这也非常有效。单击提交按钮时,表单将在后台上载。


    我不知道怎么做,就是让这两个人一起工作。如果我使用javascript提交表单(如上面的多文件示例所示),则提交表单,但不调用jquery.form函数,因此表单不会在后台提交。

    我想也许我需要改变登记表如下…

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

    …但这并没有解决问题。当我尝试的时候也是这样。AjaxSubmit而不是.AjaxForm。

    我错过了什么?

    • 顺便说一句:我知道使用多文件上传单个文件听起来可能有点奇怪,但我的想法是文件的数量将根据用户的帐户动态变化。所以,我从一开始,但数字会根据情况而变化。
    1 回复  |  直到 16 年前
        1
  •  1
  •   Alan M.    16 年前

    结果证明,答案非常简单。

    而不是用程序提交…

    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);