Saya memiliki formulir dengan banyak kolom input.
Ketika saya menangkap acara ajukan formulir dengan jQuery, apakah mungkin untuk mendapatkan semua bidang input formulir itu dalam array asosiatif?
javascript
jquery
Vasil
sumber
sumber
Jawaban:
Berkat tip dari Simon_Weaver, berikut adalah cara lain untuk melakukannya, menggunakan
serializeArray
:Perhatikan bahwa cuplikan ini akan gagal pada
<select multiple>
elemen.Tampaknya input formulir HTML 5 baru tidak berfungsi dengan
serializeArray
di jQuery versi 1.3. Ini berfungsi dalam versi 1.4+sumber
name
danvalue
. Solusi yang lebih baik mungkin untuk memproses output dari serializeArray ke format apa pun yang diperlukan.<select>
elemen? Saya mencobavar $inputs = $('#new-ticket :input, :select');
tetapi itu tidak berhasil. Adakah yang tahu cara yang tepat untuk melakukan ini karena saya pikir saya tidak melakukan itu dengan benar.$("#new-ticket :input, #new-ticket :select")
, atau bahkan lebih baik,$(":input, :select", "#new-ticket")
Terlambat ke pesta tentang pertanyaan ini, tetapi ini bahkan lebih mudah:
sumber
.serialize()
( api.jquery.com/serialize ) menempatkan semua elemen formulir dalam string tunggal yang siap ditambahkan ke URL dalam string kueri, pada dasarnya meniru permintaan formulir GET. Ini tidak akan mencapai apa yang dicapai jawaban nick..serialize()
juga bekerja pada elemen bentuk saja. Jadi$('form select').serialize()
akan membuat serialisasi data hanya untuk pilihan.$('#myForm')
, gunakan $ (ini).Bentuk jquery.form Plugin dapat membantu dengan apa yang orang lain mencari akhir bahwa sampai pada pertanyaan ini. Saya tidak yakin apakah itu langsung melakukan apa yang Anda inginkan atau tidak.
Ada juga fungsi serializeArray .
sumber
Kadang-kadang saya menemukan satu demi satu lebih bermanfaat. Untuk itu, ini dia:
sumber
[0].value
ini yaitu$(...)[0].value;
memberi saya nilai input secara langsung, terima kasih!Variabel elemen akan berisi semua input, pilih, textareas dan fieldsets dalam formulir.
sumber
Berikut ini adalah solusi lain, dengan cara ini Anda dapat mengambil semua data tentang formulir dan menggunakannya dalam panggilan sisi server atau sesuatu.
Anda kemudian dapat menggunakan ini dengan panggilan ajax:
Semoga ini ada gunanya bagi kalian :)
sumber
Punya masalah serupa dengan sedikit twist dan saya pikir saya akan membuang ini. Saya memiliki fungsi callback yang mendapatkan formulir jadi saya sudah punya objek bentuk dan tidak bisa dengan mudah varian
$('form:input')
. Sebaliknya saya datang dengan:Ini mirip tetapi tidak identik situasinya, tetapi saya menemukan utas ini sangat berguna dan saya pikir saya akan menyelipkan ini pada akhirnya dan berharap orang lain menganggapnya berguna.
sumber
Asosiatif? Bukan tanpa pekerjaan, tetapi Anda dapat menggunakan penyeleksi generik:
sumber
jQuery's
serializeArray
tidak termasuk bidang yang dinonaktifkan, jadi jika Anda membutuhkannya juga, coba:sumber
http://api.jquery.com/serializearray/
Ini juga dapat dilakukan tanpa jQuery menggunakan objek FormData Level 2 XMLHttpRequest
http://www.w3.org/TR/2010/WD-XMLHttpRequest2-20100907/#the-formdata-interface
sumber
Jangan lupa kotak centang dan tombol radio -
sumber
Potongan kode ini akan berfungsi sebagai ganti nama, email masukkan nama bidang formulir Anda
sumber
Tampaknya aneh bahwa tidak ada orang yang telah meningkatkan atau mengusulkan solusi singkat untuk mendapatkan data daftar. Hampir tidak ada bentuk yang akan menjadi objek dimensi tunggal.
Kelemahan dari solusi ini adalah, tentu saja, bahwa objek tunggal Anda harus diakses pada indeks [0]. Tapi IMO jauh lebih baik daripada menggunakan salah satu solusi pemetaan selusin baris.
sumber
Saya memiliki masalah yang sama dan menyelesaikannya dengan cara yang berbeda.
Ini mengembalikan nilai dari semua bidang input. Anda bisa mengubahnya
$(':input')
menjadi lebih spesifik.sumber
Solusi yang sama seperti yang diberikan oleh nick , tetapi dengan memasukkan nama input array misalnya
<input type="text" name="array[]" />
sumber
Jika Anda perlu mendapatkan beberapa nilai dari input dan Anda menggunakan [] untuk menentukan input dengan banyak nilai, Anda dapat menggunakan yang berikut:
sumber
Terinspirasi oleh jawaban Lance Rushing dan Simon_Weaver , ini adalah solusi favorit saya.
Outputnya adalah array objek, mis
Dengan kode di bawah ini,
hasil akhirnya adalah
sumber
Saya menggunakan kode ini tanpa setiap loop:
sumber
Saya harap ini bermanfaat, sekaligus yang termudah.
sumber
Ketika saya perlu melakukan panggilan ajax dengan semua bidang formulir, saya punya masalah dengan : input selector mengembalikan semua kotak centang apakah mereka diperiksa atau tidak. Saya menambahkan pemilih baru untuk mendapatkan elemen formulir yang dapat dikirimkan:
pemakaian:
Saya belum mengujinya dengan beberapa kotak pilih, tetapi ini berfungsi untuk mendapatkan semua bidang formulir seperti yang akan dikirim oleh standar.
Saya menggunakan ini ketika menyesuaikan opsi produk pada situs OpenCart untuk menyertakan kotak centang dan bidang teks serta jenis kotak pilih standar.
sumber
serialize () adalah metode terbaik. @ Christopher Parker mengatakan bahwa Nickf's anwser mencapai lebih banyak, namun tidak memperhitungkan bahwa formulir tersebut mungkin berisi textarea dan pilih menu. Jauh lebih baik menggunakan serialize () dan kemudian memanipulasinya sesuai kebutuhan. Data dari serialize () dapat digunakan di pos Ajax atau dapatkan, jadi tidak ada masalah di sana.
sumber
Semoga ini bisa membantu seseorang. :)
sumber
Semua jawaban baik, tetapi jika ada bidang yang ingin Anda abaikan dalam fungsi itu? Mudah, beri bidang properti, misalnya abaikan_ini:
Dan di Fungsi Serialize Anda:
Itulah cara Anda mengabaikan beberapa bidang.
sumber
$('.mandatory');
dan!$('.mandatory');
ignore_this
kedata-ignore-this="true"
alih-alih membuat atribut Anda sendiri yang tidak memvalidasi w3cCoba kode berikut:
sumber
Untuk beberapa elemen pilih (
<select multiple="multiple">
), saya memodifikasi solusi dari @Jason Norwood-Young untuk membuatnya berfungsi.Jawabannya (seperti yang diposting) hanya mengambil nilai dari elemen pertama yang dipilih, tidak semuanya . Itu juga tidak menginisialisasi atau kembali
data
, mantan melemparkan kesalahan JavaScript.Ini versi baru:
Pemakaian:
Catatan: Anda hanya perlu memastikan bahwa pilihan
name
Anda telah[]
ditambahkan ke akhir, misalnya:sumber
sumber