使用 jQuery 提交表单 [关闭]

Posted

技术标签:

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

我想使用 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://***.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

以上是关于使用 jQuery 提交表单 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

怎么使用jquery提交表单

在 Symfony 中提交表单后如何关闭窗口选项卡?

提交表单后如何关闭此窗口?

jQuery - e.preventDefault 难题/阻止默认后无法提交表单

表单提交后关闭 Colorbox iframe,然后重定向父页面

jquery中表单提交,怎么打开新页面?