【问题标题】:Submit a form using jQuery [closed]使用 jQuery 提交表单 [关闭]
【发布时间】:2010-11-15 01:49:24
【问题描述】:

我想使用 jQuery 提交表单。有人可以提供代码、演示或示例链接吗?

【问题讨论】:

    标签: jquery


    【解决方案1】:

    这取决于您是正常提交​​表单还是通过 AJAX 调用提交。您可以在 jquery.com 找到很多信息,包括带有示例的文档。要正常提交表单,请查看该站点的 submit() 方法。对于AJAX,有许多不同的可能性,尽管您可能希望使用ajax()post() 方法。请注意,post() 实际上只是一种通过简化且有限的接口调用ajax() 方法的便捷方式。

    我每天都使用的一个重要资源,你应该收藏它是How jQuery Works。它有关于使用 jQuery 的教程,左侧导航可以访问所有文档。

    例子:

    正常

    $('form#myForm').submit();
    

    AJAX

    $('input#submitButton').click( function() {
        $.post( 'some-url', $('form#myForm').serialize(), function(data) {
             // ... do something with response from server
           },
           'json' // I expect a JSON response
        );
    });
    
    $('input#submitButton').click( function() {
        $.ajax({
            url: 'some-url',
            type: 'post',
            dataType: 'json',
            data: $('form#myForm').serialize(),
            success: function(data) {
                       // ... do something with the data...
                     }
        });
    });
    

    请注意,上面的 ajax()post() 方法是等效的。您可以在ajax() 请求中添加其他参数来处理错误等。

    【讨论】:

      【解决方案2】:

      您必须使用$("#formId").submit()

      您通常会在函数中调用它。

      例如:

      <input type='button' value='Submit form' onClick='submitDetailsForm()' />
      
      <script language="javascript" type="text/javascript">
          function submitDetailsForm() {
             $("#formId").submit();
          }
      </script>
      

      您可以在Jquery website 上获得更多信息。

      【讨论】:

      • 如果您使用 jQuery,为什么要使用内联 onclick 属性?
      【解决方案3】:

      当你有一个现有的表单时,现在应该可以使用 jquery - ajax/post 现在你可以:

      • 等待表单的提交 - 事件
      • 阻止提交的默认功能
      • 做自己的事

        $(function() {
            //hang on event of form with id=myform
            $("#myform").submit(function(e) {
        
                //prevent Default functionality
                e.preventDefault();
        
                //get the action-url of the form
                var actionurl = e.currentTarget.action;
        
                //do your own request an handle the results
                $.ajax({
                        url: actionurl,
                        type: 'post',
                        dataType: 'application/json',
                        data: $("#myform").serialize(),
                        success: function(data) {
                            ... do something with the data...
                        }
                });
        
            });
        
        });
        

      请注意,为了使serialize() 函数在上面的示例中起作用,所有表单元素都需要定义其name 属性。

      表格示例:

      <form id="myform" method="post" action="http://example.com/do_recieve_request">
      
      <input type="text" size="20" value="default value" name="my_input_field">
      ..
      .
      </form>
      

      @PtF - 在此示例中,数据是使用 POST 提交的,因此这意味着您可以通过

      访问您的数据
       $_POST['dataproperty1'] 
      

      ,其中 dataproperty1 是 json 中的“变量名”。

      如果你使用 CodeIgniter,这里是示例语法:

       $pdata = $this->input->post();
       $prop1 = $pdata['prop1'];
       $prop1 = $pdata['prop2'];
      

      【讨论】:

        【解决方案4】:

        在 jQuery 中,我更喜欢以下内容:

        $("#form-id").submit()
        

        但话又说回来,您真的不需要 jQuery 来执行该任务 - 只需使用常规 JavaScript:

        document.getElementById("form-id").submit()
        

        【讨论】:

        • @windmaomao 我遇到了同样的问题。我的 jQuery 运行了所有其他功能,但不会提交表单。它仅使用 document.getElementById 方法即可工作。
        【解决方案5】:

        来自手册:jQuery Doc

        $("form:first").submit();
        

        【讨论】:

        • 通过“id”提交表单比找到第一个表单并提交更容易。但是如果一次只有一个表单,它会完美工作。
        【解决方案6】:

        信息
        如果有人使用

        $('#formId').submit();
        

        不要这样做

        <button name = "submit">
        

        我花了好几个小时才发现 submit() 不能这样工作。

        【讨论】:

        • 关键字"sumit" 上的拼写错误使我们不清楚拼写错误是无意回答还是与问题有关。你的意思是一个名为"submit" 的按钮搞砸了jquery form submit()?或者你的意思是问题在于你给了按钮name提交而不是标准的type="submit"
        • 我的目的不是回答这个问题,而是告诉那些面临这个问题的人。我认为问题在于没有定义类型的按钮名称,因为我在提交之前使用了 onclick 事件来检查一些输入。如果 type=submit 则表单提交而不会触发我的 onclick 事件。
        • &lt;button id= "submit"&gt; 也不允许提交
        【解决方案7】:

        使用它来使用 jquery 提交您的表单。 这是链接http://api.jquery.com/submit/

        <form id="form" method="post" action="#">
            <input type="text" id="input">
            <input type="button" id="button" value="Submit">
        </form>
        
        <script type="text/javascript">
        $(document).ready(function () {
            $( "#button" ).click(function() {
                $( "#form" ).submit();
            });
        });
        </script>
        

        【讨论】:

        • 虽然这是一篇旧帖子,但值得在您的按钮中添加一个类型 button 以确保表单不会提交(因为并非所有浏览器都以相同的方式处理没有类型的按钮)。跨度>
        • @Mikey 感谢您的建议。
        【解决方案8】:
        $("form:first").submit();
        

        events/submit

        【讨论】:

          【解决方案9】:

          这将发送一个带有预加载器的表单:

          var a=$('#yourform').serialize();
          $.ajax({
              type:'post',
              url:'receiver url',
              data:a,
              beforeSend:function(){
                  launchpreloader();
              },
              complete:function(){
                  stopPreloader();
              },
              success:function(result){
                   alert(result);
              }
          });
          

          我有一些技巧可以用随机方法 http://www.jackart4.com/article.html 修改表单数据帖子

          【讨论】:

          • 你能发布更新的链接吗?上面的链接不再有效。
          【解决方案10】:

          请注意,如果您已经为表单安装了提交事件侦听器,则内部调用 submit()

          jQuery('#<form-id>').submit( function(e){ 
              e.preventDefault();
              // maybe some validation in here
              if ( <form-is-valid> ) jQuery('#<form-id>').submit();
          });
          

          不会工作,因为它会尝试为此表单的提交事件(失败)安装新的事件侦听器。所以你必须访问 HTML 元素本身(从 jQquery 解包)并直接在这个元素上调用 submit():

              jQuery('#<form-id>').submit( function(e){ 
                e.preventDefault();
                // note the [0] array access:
                if ( <form-is-valid> ) jQuery('#<form-id>')[0].submit();
              });
          

          【讨论】:

            【解决方案11】:

            您也可以使用 jquery 表单插件,也可以使用 ajax 提交:

            http://malsup.com/jquery/form/

            【讨论】:

              【解决方案12】:

              请注意,在 Internet Explorer 中动态创建的表单存在问题。像这样创建的表单不会在 IE 中提交(9):

              var form = $('<form method="post" action="/test/Delete/">' +
                           '<input type="hidden" name="id" value="' + myid + '"></form>');
              $(form).submit();
              

              要让它在 IE 中工作,请创建表单元素并在提交之前附加它,如下所示:

              var form = document.createElement("form");
              $(form).attr("action", "/test/Delete")
                     .attr("method", "post");
              $(form).html('<input type="hidden" name="id" value="' + myid + '" />');
              document.body.appendChild(form);
              $(form).submit();
              document.body.removeChild(form);
              

              像示例 1 一样创建表单然后附加它将不起作用 - 在 IE9 中它会引发 JScript 错误 DOM Exception: HIERARCHY_REQUEST_ERR (3)

              给汤米 W @https://stackoverflow.com/a/6694054/694325 的道具

              【讨论】:

                【解决方案13】:
                jQuery("a[id=atag]").click( function(){
                
                    jQuery('#form-id').submit();      
                
                            **OR**
                
                    jQuery(this).parents("#form-id").submit();
                });
                

                【讨论】:

                  【解决方案14】:

                  目前的解决方案要求您知道表单的 ID。

                  使用此代码提交表单,无需知道 ID:

                  function handleForm(field) {
                      $(field).closest("form").submit();
                  }
                  

                  例如,如果您想处理按钮的点击事件,您可以使用

                  $("#buttonID").click(function() {
                      handleForm(this);    
                  });
                  

                  【讨论】:

                    【解决方案15】:

                    如果按钮位于表单标签之间,我更喜欢这个版本:

                    $('.my-button').click(function (event) {
                        var $target = $( event.target );
                        $target.closest("form").submit();
                    });
                    

                    【讨论】:

                      【解决方案16】:

                      我的做法略有不同,将按钮改为提交按钮,然后点击

                      $("#submit").click(function (event) {
                        $(this).attr("type", "submit");
                        $(this).click();
                      });
                      

                      【讨论】:

                        【解决方案17】:

                        你可以这样使用它:

                          $('#formId').submit();
                        

                        document.formName.submit();
                        

                        【讨论】:

                          【解决方案18】:

                          动态表单的 IE 技巧:

                          $('#someform').find('input,select,textarea').serialize();
                          

                          【讨论】:

                            【解决方案19】:
                            function  form_submit(form_id,filename){
                                $.post(filename,$("#"+form_id).serialize(), function(data){
                                    alert(data);
                                });
                            }
                            

                            它将通过 AJAX 以您给定的文件名发布表单数据。

                            【讨论】:

                              【解决方案20】:

                              我推荐一个通用的解决方案,这样您就不必为每个表单添加代码。使用 jquery 表单插件 (http://jquery.malsup.com/form/) 并添加此代码。

                              $(function(){
                              $('form.ajax_submit').submit(function() {
                                  $(this).ajaxSubmit();
                                          //validation and other stuff
                                      return false; 
                              });
                              
                              });
                              

                              【讨论】:

                                【解决方案21】:

                                你可以这样做:

                                $('#myform').bind('submit', function(){ ... });
                                

                                【讨论】:

                                  【解决方案22】:

                                  我还使用以下方法通过 Ajax 提交了表单(实际上并未提交):

                                    jQuery.get("process_form.php"+$("#form_id").serialize(), {}, 
                                      function() {
                                        alert("Okay!"); 
                                      });
                                  

                                  【讨论】:

                                  • 这和 submit() 完全不同。一方面 submit() 使用 POST 语义,您使用的是 GET
                                  猜你喜欢
                                  • 1970-01-01
                                  • 2011-09-30
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多