jQueryを使用してフォームを送信する[終了]


476

jQueryを使用してフォームを送信したい。誰かがコード、デモ、またはサンプルリンクを提供できますか?

回答:


482

フォームを通常どおり送信するか、AJAX呼び出しで送信するかによって異なります。jquery.comで、例付きのドキュメントを含む多くの情報を見つけることができます。フォームを正常に送信するには、submit()そのサイトでメソッドを確認してください。以下のためにAJAXあなたはおそらくいずれかを使用したいけれども、多くの異なる可能性があるajax()post()の方法を。これpost()ajax()、シンプルで制限されたインターフェースでメソッドを呼び出す便利な方法にすぎないことに注意してください。

私が毎日使用している重要なリソースは、jQueryの仕組みです。です。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
serializeメソッドがありませんでした。明らかに、私はjQuery.comを見ましたが、$.post送信するデータを生成するためにフォームを明示的に分解および再構築することに関する彼らのドキュメント。ありがとう!
ノーメン14

1
送信する前に投稿リクエストに追加するデータの準備ができている場合(ajaxではなく、フォーム投稿投稿リクエスト)、どうすればよいですか?
アレックス

1
@AlexanderSupertramp-上記の例では、データはURLエンコードされたフォームパラメータとして送信されています。データを追加のフォームパラメータとして単純に追加できます。$('form#MyForm').serialize() + '&newData=' + newData + '&moreData=' + moreData。注:後者の2つは、を使用してURLエンコードする必要がある場合がありencodeURIComponent()ます。または-両端でJSONエンコーディングを使用するように変更することもできますが、追加のデータを含むフォームデータをJavaScriptデータ構造に入れてシリアル化する必要があります。その場合、あなたはおそらく使用したいserializeArrayのあなたの他のデータをフォームにしてマージ。
tvanfosson

「jsonの応答を期待しています」で別の問題が解決しました(re:Flaskの呼び出しが失敗する)。
scharfmn 2015年

「submit」という名前の送信ボタンがある場合、これは静かに失敗するか(jQuery)、「送信は機能ではない」というエラーを生成します(vanilla 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のWebサイトを参照してください


55
jQueryを使用している場合、なぜインラインのonclick属性を使用するのですか?
nnnnnn 2013

3
@BradleyFlood-代わりにどのようにすればよいのでしょうか?私たちのような初心者は知りたいですか?
MarcoZen 2017

2
@MarcoZen私はBradleyFloodが「例:」というフレーズはインラインのonclick属性を使用することがいくつかの可能な方法の1つにすぎないことを意味していることを指摘していたと思います。実際、よりjQueryのようなものは.on( 'click'、submitDetailsForm)を使用することになります。
Jan Kukacka

@JanKukacka-注意。ありがとう。
MarcoZen 2017

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が後で読み込まれる/延期されると、その関数が使用できない場合があります。ドキュメントでこれを初期化することを考えました。準備ができて....同じ考えにいるかどうかわかりませんが、どこまで説明できますか。
womd 2013

1
「name」属性を定義する必要があることを強調していただきありがとうございます
ccalboni '11年

1
dataType: 'application / json'はエラーです。dataType: 'json'を読み取る必要があります。上記の例のように残しておくと、解析エラーが発生します。
ハンクスター

@Hanksterはい、jsonでしたが編集されました... Hollanderは確認/確認できますか?
womd 2017年

68

jQueryでは、次のようにします。

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

しかし、繰り返しになりますが、そのタスクを実行するためにjQueryは本当に必要ありません。通常のJavaScriptを使用するだけです。

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

1
@windmaomaoウェブページにjQueryを含めましたか?$の代わりにjQueryを使用する必要がある場合もあります。ただし、jQueryが既に含まれている場合を除き、通常のJSソリューションを使用することをお勧めします。
gernberg 14

1
@windmaomao同じ問題が発生しました。私のjQueryは他のすべての関数を実行しましたが、フォームを送信しませんでした。document.getElementByIdメソッドを使用するだけで機能しました。
ChallengeAccepted

41

マニュアルから:jQuery Doc

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

3
最初の形式を見つけることよりも、「ID」でフォームを送信し、それを提出する打者で一度に一つだけのフォームがある場合は、それは完璧に動作します。。
Chintan Thummar

22


誰かが使用する場合の情報

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

このようなことはしないでください

<button name = "submit">

submit()がこのように機能しないことを見つけるのに何時間もかかりました。


1
キーワード"sumit"の入力ミスにより、入力ミスが意図したものではないのか、それとも問題に関連していたのかが不明確になります。という名前のボタンが"submit"jqueryフォームsubmit()を台無しにするということですか?それとも、標準ではなくボタン名を submitにしたことが問題だったのですtype="submit"か?
Daryn

私の意図は、この質問に答えることではなく、この問題に直面した人々に伝えることでした。送信する前にonclickイベントを使用して入力をチェックしたため、タイプが定義されていないボタン名に問題があると思います。type = submitの場合、onclickイベントが発生せずにフォームが送信されます。
AZソフト

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提案をありがとう。
Chintan Thummar

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


更新されたリンクを投稿できますか?上記のリンクは機能しなくなりました。
Chris22、2017


12

フォームの送信イベントリスナーをすでにインストールしている場合は、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();
    });


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

たとえば、ボタンのクリックイベントを処理したい場合は、

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

6

ボタンがフォームタグの間にある場合、私はこのバージョンを好みます:

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



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()のようなものではありません。1つは、submit()がPOSTセマンティクスを使用しているため、GETを使用していること
Scott Evernden 2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.