jQuery membentuk serialisasi - string kosong

95

HTML saya:

 <script type="text/javascript">

    $(function() {

        $("#bt1").click(function() {

            var f = $("#form1");
            var formData = f.serialize();

            alert(formData);
        });

    }); 
</script> 

 <div id="div1">
      <form id="form1" action="/Home/Test1" method="post" name="down">
        <div id="div2">
            <input id="input1" type="text" value="2" />
        </div>    
      </form>
  </div>

 <input type="submit" id="bt1" />

Ketika saya menjalankan acara klik, formData kosong. Saya menggunakan jQuery 1.4.2.

pengguna137348
sumber

Jawaban:

214

Anda harus memberi inputnama pada elemen tersebut. Misalnya:

<form id="form1" action="/Home/Test1" method="post" name="down">
    <div id="div2">
        <input id="input1" type="text" value="2" name="foo"/>
    </div>    
</form>

akan memberi Anda di kotak peringatan foo=2.

.serialize()mengambil nama dan nilai bidang formulir dan membuat seperti string name1=value1&name2=value2. Tanpa nama, ia tidak dapat membuat string seperti itu.

Perhatikan bahwa nameada sesuatu yang berbeda dari id. Formulir Anda juga tidak akan berfungsi jika Anda menggunakannya dengan cara "normal". Setiap bidang formulir membutuhkan nama.

Felix Kling
sumber
1
apakah id diperlukan untuk membuat serialisasi btw?
Vic
Izinkan saya menyarankan untuk memasukkan jawaban Madbreaks di sini juga.
Slavia
Saya memiliki nama tetapi saya masih memiliki string kosong saat membuat serialisasi, tampilan saya adalah koleksi jadi nama-nama tersebut misalnya [0] .Unit, [0] .Currency
Marc Roussel
Jawaban di bawah membantu saya ... pastikan masukan Anda tidak DINONAKTIFKAN!
soundstripe
83

Meskipun tidak berlaku untuk contoh khusus ini, perilaku yang sama terjadi jika satu atau lebih masukan formulir disabled. Input tersebut tidak akan muncul dalam string serial. Dalam kasus saya, semua input formulir memiliki nilai tetapi dinonaktifkan, sehingga string kosong dikembalikan.

Madbreaks
sumber
4
Itu buruk. Ingin menonaktifkan kolom saat saya mengirim email dengan gaya ajax dan melakukannya sebelum membuat serialisasi formulir ...
Daniel Lang
1
Ya ampun, ini adalah masalah yang membuatku gila. +1 man, cara apa saja untuk membuatnya berfungsi pada elemen yang dinonaktifkan?
Noitidart
@Noitidart Anda dapat menulis serializeekstensi jQuery Anda sendiri yang mengulangi input dan menyertakan yang dinonaktifkan. Tapi tidak ada cara untuk melakukannya, sejauh yang saya tahu, menggunakan jQuery out-of-the-box.
Madbreaks
Masuk akal untuk tidak menyertakan elemen yang dinonaktifkan, karena elemen yang dinonaktifkan tidak boleh berisi input pengguna.
Jenny O'Reilly
2
@ JennyO'Reilly Tentu, tetapi tidak mengandung input pengguna tidak berarti "tidak memiliki nilai".
Madbreaks
10

Tidak ada nameatribut di input ... yang mungkin menjadi masalah untuk serialisasi.

<input id="input1" type="text" value="2" name="input1" />
Pemenang
sumber
Pria. Anda adalah penyelamat hidup !! Terima kasih.
Anjana Silva
6

Pastikan juga tidak ada 2 elemen dengan id yang sama di halaman.

VahidN
sumber
3
Ini adalah komentar, bukan jawaban atas pertanyaan. Silakan gunakan komentar di masa mendatang. Terima kasih :)
Gone Coding