Kirim formulir menggunakan jQuery [ditutup]

476

Saya ingin mengirimkan formulir menggunakan jQuery. Dapatkah seseorang memberikan kode, demo, atau tautan contoh?

mehul
sumber

Jawaban:

482

Itu tergantung pada apakah Anda mengirimkan formulir secara normal atau melalui panggilan AJAX. Anda dapat menemukan banyak informasi di jquery.com , termasuk dokumentasi dengan contoh-contoh. Untuk mengirimkan formulir secara normal, lihat submit()metode di situs itu. Untuk AJAX , ada banyak kemungkinan yang berbeda, meskipun Anda mungkin ingin menggunakan metode ajax()atau post(). Perhatikan bahwa post()ini hanyalah cara yang mudah untuk memanggil ajax()metode dengan antarmuka yang disederhanakan dan terbatas.

Sumber daya kritis, yang saya gunakan setiap hari, yang harus Anda tandai adalah Cara jQuery Bekerja . Ini memiliki tutorial tentang cara menggunakan jQuery dan navigasi sebelah kiri memberikan akses ke semua dokumentasi.

Contoh:

Normal

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

Perhatikan bahwa ajax()dan post()metode di atas setara. Ada parameter tambahan yang dapat Anda tambahkan ke ajax()permintaan untuk menangani kesalahan, dll.

tvanfosson
sumber
3
Saya melewatkan metode serialisasi. Jelas, saya melihat jQuery.com, tetapi dokumen mereka $.postsecara eksplisit mendekonstruksi dan merekonstruksi formulir untuk menghasilkan data untuk dikirimkan. Terima kasih!
nomen
1
jika saya memiliki beberapa data yang siap, saya ingin menambahkan permintaan posting (bukan ajax, formulir kirim permintaan posting) sebelum mengirimkan, bagaimana saya melakukannya?
ア レ ッ ク ス
1
@AlexanderSupertramp - dalam contoh di atas, data dikirim sebagai parameter formulir yang di-url. Anda bisa menambahkan data sebagai parameter formulir tambahan. $('form#MyForm').serialize() + '&newData=' + newData + '&moreData=' + moreData. Catatan: dua yang terakhir mungkin perlu di-encode menggunakan url encodeURIComponent(). ATAU - Anda bisa mengubah untuk menggunakan pengkodean JSON di kedua ujungnya tetapi kemudian Anda harus memasukkan data formulir ke dalam struktur data JavaScript dengan data tambahan Anda dan membuat serialisasi. Jika demikian, Anda mungkin akan menggunakan serializeArrayformulir dan menggabungkan data Anda yang lain.
tvanfosson
"Saya mengharapkan respons json" memecahkan masalah yang berbeda untuk saya (re: panggilan ke Flask gagal).
scharfmn
Jika Anda memiliki tombol kirim bernama 'kirim', ini akan gagal (jQuery) atau menghasilkan kesalahan yang mengatakan "kirim bukan fungsi" (vanilla js). Mengganti nama tombol untuk hal lain akan menyelesaikan . ¯_ (ツ) _ / ¯ 🤷
fzzylogic
122

Anda harus menggunakan $("#formId").submit().

Anda biasanya akan menyebutnya dari dalam suatu fungsi.

Sebagai contoh:

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

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

Anda dapat memperoleh informasi lebih lanjut tentang ini di situs web Jquery .

Draco
sumber
55
Jika Anda menggunakan jQuery mengapa Anda menggunakan atribut onclick inline?
nnnnnn
3
@BradleyFlood - Bagaimana seharusnya dia melakukannya? Pemula seperti kami ingin tahu?
MarcoZen
2
@ MarscoZen Saya pikir BradleyFlood menunjukkan bahwa frasa "Misalnya:" berarti bahwa menggunakan atribut onclick inline hanyalah salah satu dari beberapa cara yang mungkin. Memang, lebih banyak jQuery akan menggunakan .on ('klik', submitDetailsForm).
Jan Kukacka
@JanKukacka - Tercatat Terima kasih.
MarcoZen
71

ketika Anda memiliki formulir yang sudah ada, yang sekarang seharusnya bekerja dengan jquery - ajax / post sekarang Anda bisa:

  • tunggu ajukan - acara formulir Anda
  • Mencegah fungsionalitas default dari submit
  • lakukan barangmu sendiri

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

Harap perhatikan bahwa agar serialize()fungsi berfungsi dalam contoh di atas, semua elemen formulir harus memiliki nameatributnya yang ditentukan.

Contoh formulir:

<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 - data dikirimkan menggunakan POST dalam sampel ini, jadi ini berarti Anda dapat mengakses data Anda melalui

 $_POST['dataproperty1'] 

, di mana dataproperty1 adalah "nama-variabel" di json Anda.

di sini contoh sintaksis jika Anda menggunakan CodeIgniter:

 $pdata = $this->input->post();
 $prop1 = $pdata['prop1'];
 $prop1 = $pdata['prop2'];
womd
sumber
Mengapa Anda menggunakan kembali pemilih formulir, mengapa tidak menggunakan kembali elemen formulir itu sendiri?
Slava Fomin II
ya, Anda juga bisa melakukan ini: <form id = "myform" onsubmit = "do_stuff ()">, tetapi jika js dimuat nanti / ditunda fungsi itu mungkin tidak tersedia .. jadi saya pikir menginisialisasi ini pada dokumen. siap .... saya tidak yakin jika saya memiliki pemikiran yang sama, dapatkah Anda menggambarkan apa yang Anda rencanakan?
womd
1
Terima kasih telah menyoroti bahwa atribut "nama" harus ditentukan
ccalboni
1
Tipe data: 'application / json' adalah kesalahan. Harus membaca dataType: 'json'. Anda akan mendapatkan kesalahan parse jika dibiarkan seperti pada contoh di atas.
Hankster
@Hankster ya, apakah json tetapi diedit ... Hollander dapat Anda periksa / konfirmasi?
womd
68

Di jQuery saya lebih suka yang berikut:

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

Tapi sekali lagi, Anda benar-benar tidak perlu jQuery untuk melakukan tugas itu - cukup gunakan JavaScript biasa:

document.getElementById("form-id").submit()
Gernberg
sumber
1
@windmaomao apakah Anda memasukkan jQuery di halaman web Anda? Bisa jadi Anda perlu menggunakan jQuery istead dari $ aswell, namun - Saya sarankan menggunakan solusi JS biasa kecuali Anda sudah memasukkan jQuery.
gernberg
1
@windmaomao saya punya masalah yang sama. JQuery saya menjalankan semua fungsi lain, tetapi tidak mau mengirimkan formulir. Ini bekerja hanya dengan menggunakan metode document.getElementById.
ChallengeAccepted
41

Dari manual: jQuery Doc

$("form:first").submit();
AdamSane
sumber
3
Adalah adonan untuk mengirimkan formulir dengan "id 'daripada menemukan formulir pertama dan mengirimkannya. Namun itu akan berfungsi dengan baik jika hanya ada satu formulir pada suatu waktu.
Chintan Thummar
22

Untuk informasi
jika ada yang menggunakan

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

Jangan seperti ini

<button name = "submit">

Butuh berjam-jam untuk menemukan saya yang mengirimkan () tidak akan berfungsi seperti ini.

AZ Soft
sumber
1
Kesalahan ketik pada kata kunci "sumit"membuatnya tidak jelas apakah kesalahan ketik tidak diinginkan dalam jawaban, atau terkait dengan masalah tersebut. Apakah maksud Anda tombol bernama "submit"messes up form jquery submit ()? Atau maksud Anda masalahnya adalah Anda memberi nama tombol kirim alih-alih standar type="submit"?
Daryn
niat saya bukan untuk menjawab pertanyaan ini tetapi untuk memberi tahu mereka yang menghadapi masalah ini. Saya pikir masalahnya adalah dengan nama tombol tanpa tipe yang ditentukan, karena saya menggunakan event onclick untuk memeriksa beberapa input sebelum mengirimkan. Jika type = submit maka form submit tanpa onclick event saya.
AZ Soft
16

Gunakan untuk mengirim formulir Anda menggunakan jquery. Ini tautannya 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>
Chintan Thummar
sumber
2
Meskipun ini adalah posting lama, ada baiknya menambahkan jenis buttonke tombol Anda untuk memastikan formulir tidak mengirimkan (karena tidak semua browser memperlakukan tombol tanpa jenis dengan cara yang sama).
Mikey
@ Mikey Terima kasih atas sarannya.
Chintan Thummar
14

ini akan mengirimkan formulir dengan preloader:

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

Saya punya beberapa trik untuk membuat posting data formulir direformasi dengan metode acak http://www.jackart4.com/article.html

jacky
sumber
dapatkah Anda memposting tautan yang diperbarui? Tautan di atas tidak lagi berfungsi.
Chris22
12

Perhatikan bahwa jika Anda sudah menginstal pendengar acara ajukan untuk formulir Anda, panggilan innner untuk mengirimkan ()

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

tidak akan berfungsi karena mencoba memasang pendengar acara baru untuk acara pengiriman formulir ini (yang gagal). Jadi, Anda harus mengakses Elemen HTML itu sendiri (membuka dari jQquery) dan memanggil kirim () pada elemen ini secara langsung:

    jQuery('#<form-id>').submit( function(e){ 
      e.preventDefault();
      // note the [0] array access:
      if ( <form-is-valid> ) jQuery('#<form-id>')[0].submit();
    });
gutschilla
sumber
7
jQuery("a[id=atag]").click( function(){

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

            **OR**

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

Perhatikan bahwa di Internet Explorer ada masalah dengan formulir yang dibuat secara dinamis. Formulir yang dibuat seperti ini tidak akan dikirimkan dalam IE (9):

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

Untuk membuatnya berfungsi di IE buat elemen bentuk dan lampirkan sebelum mengirimkan seperti:

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

Membuat formulir seperti pada contoh 1 dan kemudian melampirkannya tidak akan berhasil - di IE9 ia melempar kesalahan JScript DOM Exception: HIERARCHY_REQUEST_ERR (3)

Props untuk Tommy W @ https://stackoverflow.com/a/6694054/694325

Nenotlep
sumber
7

Solusi sejauh ini mengharuskan Anda untuk mengetahui ID formulir.

Gunakan kode ini untuk mengirimkan formulir tanpa harus tahu ID:

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

Misalnya, jika Anda ingin menangani acara klik untuk tombol, Anda dapat menggunakannya

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

Jika tombol terletak di antara tag formulir, saya lebih suka versi ini:

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

Anda bisa menggunakannya seperti ini:

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

ATAU

document.formName.submit();
Ram Ch. Bachkheti
sumber
4

Trik IE untuk bentuk dinamis:

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

Pendekatan saya sedikit berbeda Ubah tombol menjadi tombol kirim dan kemudian klik

$("#submit").click(function(event) {
$(this).attr('type','submit');
$(this).click();
});
NaveenDA
sumber
2
function  form_submit(form_id,filename){
    $.post(filename,$("#"+form_id).serialize(), function(data){
        alert(data);
    });
}

Ini akan memposting data formulir pada nama file yang Anda berikan melalui AJAX.

kdniazi
sumber
1

Saya merekomendasikan solusi umum sehingga Anda tidak perlu menambahkan kode untuk setiap formulir. Gunakan plugin formulir jquery (http://jquery.malsup.com/form/) dan tambahkan kode ini.

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

});
danidacar
sumber
1

Anda bisa melakukannya seperti ini:

$('#myform').bind('submit', function(){ ... });
vdegenne
sumber
-2

Saya juga menggunakan yang berikut ini untuk mengirimkan formulir (tanpa benar-benar mengirimkannya) melalui Ajax:

  jQuery.get("process_form.php"+$("#form_id").serialize(), {}, 
    function() {
      alert("Okay!"); 
    });
newman brian
sumber
3
ini bukan sesuatu seperti kiriman (). untuk satu hal kirimkan () menggunakan semantik POST, Anda menggunakan GET
Scott Evernden