使用jQuery提交表单


476

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

Answers:


482

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

我每天都要使用的一项重要资源,即jQuery How 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()请求中以处理错误等。


3
我缺少序列化方法。显然,我查看了jQuery.com,但是他们的文档$.post明确地对表单进行了解构和重构,以生成要提交的数据。谢谢!
nomen 2014年

1
如果我已经准备好一些数据,想在提交之前将其添加到发布请求中(而不是Ajax,表单提交发布请求),该如何做?
アレックス

1
@AlexanderSupertramp-在上面的示例中,数据将作为url编码的表单参数发送。您可以简单地将数据附加为其他表单参数。$('form#MyForm').serialize() + '&newData=' + newData + '&moreData=' + moreData。注意:后面两个可能需要使用进行url编码encodeURIComponent()。或者-您可以更改为在两端使用JSON编码,但随后需要将表单数据与多余的数据放入JavaScript数据结构中并进行序列化。在这种情况下,你可能会使用serializeArray的形式和合并的其他数据。
tvanfosson

“我期望json响应”为我解决了一个不同的问题(例如:对Flask的调用失败)。
2015年

如果您有一个名为“ submit”的提交按钮,这将悄然失败(jQuery)或产生错误消息“ submit is a function”(香草js)。将按钮重命名为其他名称将解决¯_(ツ)_ / ¯🤷–
fzzylogic

122

您将不得不使用$("#formId").submit()

通常,您可以从函数中调用此函数。

例如:

<input type='button' value='Submit form' onClick='submitDetailsForm()' />

<script language="javascript" type="text/javascript">
    function submitDetailsForm() {
       $("#formId").submit();
    }
</script>

您可以在Jquery网站上获取更多信息。


55
如果您使用的是jQuery,为什么要使用内联onclick属性?
nnnnnn

3
@BradleyFlood-他应该怎么做呢?像我们这样的新手想知道吗?
MarcoZen

2
@MarcoZen我认为BradleyFlood指出短语“例如:”表示使用内联onclick属性只是几种可能方式之一。确实,更多类似于jQuery的将使用.on('click',SubmitDetailsForm)。
Jan Kukacka '17

@JanKukacka-注意 谢谢。
MarcoZen

71

当您拥有现有表单时,现在应该可以使用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'];

为什么要重用表单的选择器,为什么不重用表单元素本身?
Slava Fomin II

是的,您也可以这样做:<form id =“ myform” onsubmit =“ do_stuff()”>,但是如果以后加载js /推迟加载该功能,则可能无法使用..因此,我认为在文档上进行初始化。准备好了....我不确定我是否也有同样的想法,你能说明你在做什么吗?
2013年

1
感谢您强调必须定义“名称”属性
-ccalboni

1
dataType:“ application / json”是错误。应该读取dataType:“ json”。如果如上例所示,则会出现解析错误。
Hankster '17

@Hankster是的,是json但被编辑了……Hollander您可以检查/确认吗?
womd

68

在jQuery中,我希望以下内容:

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

但是再说一次,您真的不需要jQuery来执行该任务-只需使用常规JavaScript:

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

1
@windmaomao您是否在网页上包含jQuery?可能是您需要使用jQuery而不是$,但是-我建议您使用常规的JS解决方案,除非您已经包含jQuery。
gernberg

1
@windmaomao我有同样的问题。我的jQuery运行了所有其他功能,但不提交表单。只需使用document.getElementById方法即可。
挑战

41

来自手册:jQuery Doc

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

3
它是通过连击“ID提交表单”比找到的第一个表单并提交然而,将完美的作品如果只有一种形式在同一时间。
Chintan Thummar

22


任何人使用的信息

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

不要这样

<button name = "submit">

花了好几个小时才发现我的commit()无法像这样工作。


1
关键字上"sumit"的错字使得不清楚错字是无意回答还是与问题有关。您的意思是说一个名为"submit"jquery 的按钮搞砸了表单Submit()吗?还是您的意思是问题在于您给按钮名称提交了而不是标准名称type="submit"
达林(Daryn)'18年

我的目的不是回答这个问题,而是告诉遇到这个问题的人。我认为问题出在没有定义类型的按钮名称上,因为我在提交之前使用onclick事件检查了一些输入。如果type = submit,则在没有我的onclick事件触发的情况下提交表单。
AZ Soft

16

使用它来使用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>

2
尽管这是一篇过时的文章,但是值得button在按钮上添加一种类型以确保表单不提交(因为并非所有浏览器都以相同的方式对待没有类型的按钮)。
Mikey

@Mikey感谢您的建议。
Chintan Thummar '18

14

这将发送带有预加载器的表格:

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


您可以发布更新的链接吗?上面的链接不再起作用。
克里斯22年


12

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

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

在尝试为此表单的Submit事件安装新的事件侦听器(失败)时将无法工作。因此,您必须访问HTML元素本身(从jQquery中解包)并直接在此元素上调用commit():

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


7
jQuery("a[id=atag]").click( function(){

    jQuery('#form-id').submit();      

            **OR**

    jQuery(this).parents("#form-id").submit();
});

7

请注意,在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


7

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

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

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

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

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

6

如果按钮位于表单标记之间,则我更喜欢以下版本:

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


4

IE动态表格的技巧:

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

3

我的方法略有不同将按钮更改为提交按钮,然后单击

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

2
function  form_submit(form_id,filename){
    $.post(filename,$("#"+form_id).serialize(), function(data){
        alert(data);
    });
}

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


1

我建议使用通用解决方案,因此您不必为每种表单添加代码。使用jquery表单插件(http://jquery.malsup.com/form/)并添加此代码。

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

});

1

你可以这样做:

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

-2

我还使用以下内容通过Ajax提交了一个表单(未实际提交):

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

3
这不像submit()。对于一件事情,
commit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.