jQuery - tambahkan parameter tambahan saat kirim (BUKAN ajax)

206

Menggunakan 'kirim' jQuery - apakah ada cara untuk memberikan parameter tambahan ke formulir? Saya TIDAK ingin melakukan ini dengan Ajax - ini adalah normal, penyerahan formulir khas.

$('#submit').click(function () {
    $('#event').submit(function () {
        data: { 
        form['attendees'] = $('#attendance').sortable('toArray').toString();
    });
});
Ciel
sumber
Teknologi sisi server mana yang Anda gunakan?
Enrique
Lihat jawaban saya [di sini] [1], yang ditambahkan ke formulir berseri sebelum dikirimkan. [1]: stackoverflow.com/questions/17809056/…
Jeff Lowery

Jawaban:

371

Yang ini melakukannya untuk saya:

var input = $("<input>")
               .attr("type", "hidden")
               .attr("name", "mydata").val("bla");
$('#form1').append(input);

didasarkan pada jawaban Daff, tetapi menambahkan atribut NAME untuk membiarkannya ditampilkan dalam koleksi formulir dan mengubah VALUE menjadi VAL Juga memeriksa ID FORMULIR (form1 dalam kasus saya)

menggunakan firebug Firefox untuk memeriksa apakah elemen telah dimasukkan.

Elemen tersembunyi dapat dikirim kembali ke koleksi formulir, hanya bidang baca-saja yang dibuang.

Michel

Michel
sumber
46
Bagaimana saya menyanyikan 'you is my sunshine' dalam biner? Terima kasih banyak. Ini memecahkan banyak hal.
Ciel
38
Anda dapat sedikit meningkatkan keterbacaan: var input = $ ("<input>", {type: "hidden", name: "mydata", value: "bla"}); $ ('# form1'). append ($ (input));
Konstantine Kalbazov
2
$ ("<input>") .attr ("type", "hidden"). attr ("name", "mydata"). val ("bla"). appendTo ('# form1'); adalah cara lain
kiev
6
Saya menyukai kombo: $ ("<input>", {type: "hidden", name: "mydata", nilai: "bla"}). AppendTo ("# form1");
gabeio
Apakah tidak ada batasan ukuran data? Saya mengirim beberapa objek besar menggunakan JSON.stringify (obj) dan metode ini dan tampaknya terpotong.
omikron
26

Dalam kasus Anda, cukup menambahkan bidang tersembunyi lain ke formulir secara dinamis.

var input = $("<input>").attr("type", "hidden").val("Bla");
$('#form').append($(input));
Daff
sumber
Data yang saya perlu kirimkan tidak mampu bentuk. Itu harus ditangkap dan ditangani di sisi server.
Ciel
Apa yang Anda maksud dengan "tidak mampu membentuk"?
Vincent Ramdhanie
Maaf - ini tidak berhasil sama sekali. Bahkan dengan data yang dipaksakan saja, itu tidak menyuntikkan ke dalam formulir.
Ciel
Itu tidak bisa ditempatkan di bidang formulir.
Ciel
2
Jika sebuah string dapat dimasukkan ke dalam form isian
PetersenDidIt
19

Anda bahkan dapat menggunakan yang ini. bekerja dengan baik untuk saya

$("#registerform").attr("action", "register.php?btnsubmit=Save") 
$('#registerform').submit();

ini akan mengirimkan btnsubmit = Simpan sebagai nilai GET ke formulir register.php.

Parag
sumber
Ini sepertinya solusi yang lebih elegan. Hanya ingat untuk menggunakan encodeURIComponent()nilai parameter tergantung pada jenis data.
Andres SK
1
Yang ini sebenarnya lebih baik ketika memungkinkan pengguna mengirimkan formulir beberapa kali. Formulir tidak akan mendapatkan lebih dari satu bidang tersembunyi dengan nilai yang berbeda.
Mellon
11

Anda bisa menulis fungsi jQuery yang memungkinkan Anda menambahkan bidang tersembunyi ke formulir:

// This must be applied to a form (or an object inside a form).
jQuery.fn.addHidden = function (name, value) {
    return this.each(function () {
        var input = $("<input>").attr("type", "hidden").attr("name", name).val(value);
        $(this).append($(input));
    });
};

Dan kemudian tambahkan bidang tersembunyi sebelum Anda mengirim:

var frm = $("#form").addHidden('SaveAndReturn', 'Save and Return')
                    .submit();
Jonathan
sumber
1
Lihat stackoverflow.com/questions/2601223/... untuk versi lebih lanjut dari addHidden
Jonathan
1
Saya suka kesederhanaan dari solusi ini. Itu tidak menangani banyak kasus tetapi juga menangani kasus itu.
Phil
11

Anda tidak perlu mengikat acara ajukan dengan mengklik tombol kirim, cukup ikat acara ajukan dan itu akan menangkap acara ajukan, tidak peduli bagaimana hal itu dipicu.

Pikirkan apa yang Anda inginkan adalah mengirimkan sortable seperti yang Anda lakukan melalui ajax. Coba lakukan sesuatu seperti ini:

var form = $('#event').submit(function () {
    $.each($('#attendance').sortable('toArray'),function(i, value){
        $("<input>").attr({
            'type':'hidden',
            'name':'attendace['+i+']'
        }).val(value).appendTo(form);
    });
});
PetersenDidIt
sumber
masih tidak muncul di formcollection sisi server ... adakah sesuatu yang khusus harus saya lakukan untuk mendapatkan bidang tersembunyi untuk muncul di server? Itu akan melalui C # / ASP.NET MVC menggunakan objek FormCollection.
Ciel
Memperbarui jawaban saya, pikir saya melakukan dan apa yang Anda coba lakukan.
PetersenDidIt
Apakah Anda menambahkan nameatribut ke input formulir tersembunyi yang dihasilkan? Per stackoverflow.com/questions/504681/… sepertinya objek FormCollection membutuhkan semua <input>elemen untuk memiliki nama.
npdoty
Ya, saya mencoba untuk mendorong sortable ke formcollection sebagai serangkaian nilai yang dipisahkan koma. Saya sudah mencoba pembaruan Anda dan masih belum memposting. Saya tidak yakin apa yang saya lakukan salah ... Saya menghargai bantuannya.
Ciel
Sepertinya masalahnya bukan pada sisi klien tetapi sisi server.
PetersenDidIt
2

Jawaban serupa, tetapi saya hanya ingin membuatnya tersedia untuk tes mudah / cepat.

var input = $("<input>")
               .attr("name", "mydata").val("go Rafa!");

$('#easy_test').append(input);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>



<form id="easy_test">
  
</form>

Cacho Santa
sumber