Saya telah melihat-lihat dokumen jQuery dan saya pikir kita bisa melakukan ini dalam satu baris menggunakan penyeleksi :
$("#myForm :input[value!='']").serialize() // does the job!
Jelas #myForm mendapatkan elemen dengan id "myForm" tetapi yang kurang jelas bagi saya pada awalnya adalah bahwa karakter spasi diperlukan antara #myForm dan: input karena ini adalah operator turunan .
: input cocok dengan semua elemen input, textarea, pilih dan tombol.
[nilai! = ''] adalah atribut yang tidak sama dengan filter. Yang aneh (dan membantu) adalah bahwa semua: tipe elemen input memiliki atribut nilai bahkan memilih dan kotak centang dll.
Akhirnya untuk juga menghapus masukan yang nilainya adalah '.' (seperti yang disebutkan dalam pertanyaan):
$("#myForm :input[value!=''][value!='.']").serialize()
Dalam kasus ini penjajaran, yaitu menempatkan dua selektor atribut di samping satu sama lain , berarti DAN. Menggunakan koma menyiratkan OR. Maaf jika itu jelas bagi orang-orang CSS!
[value]
cocokkan elemen apa pun dengan atribut yangvalue
ada , termasuk yang memiliki nilai kosong (atau tidak ada). Hal ini disebabkan oleh bug di versi jQuery sebelumnya yang membuat ketidakkonsistenan antara variasiinput[value]
dan:input[value]
. Ambil, misalnya<input value="foo"><input value=""><input value><input>
,; bug diilustrasikan di biola ini .$form.find(":input[value]")
- bidang kosong tidak dipilih. Ini tidak berhasil:$form.find(":input[value!='']")
- semua bidang dipilih. Harapan yang membantu seseorang. (jQuery 2.0.0)$form.find(":input[value]")
juga bekerja untuk saya (jQuery 1.11.0)value
atribut sudah ada di sana. Ia tidak mengenalinya sebaliknya.value
diatur secara terprogram, ini tidak akan berfungsi (value
tidak akan ada sebagai atribut HTML, tetapi akan sebagai atribut data pada input). Dalam kasus tersebut, coba ini:$('#myForm :input').filter(function(i) { return ($(this).val().length != 0); }).serialize()
. EDIT: Baru saja melihat jawaban Rich untuk efek yang sama.Saya tidak bisa mendapatkan solusi Tom untuk bekerja (?), Tapi saya bisa melakukan ini
.filter()
dengan menggunakan fungsi singkat untuk mengidentifikasi bidang kosong. Saya menggunakan jQuery 2.1.1.sumber
:input
Pemilih pada dasarnya memilih semua kontrol bentuk. Memilih semua elemen input, textarea, pilih dan tombol." sumberIni bekerja untuk saya:
sumber
!!
mengetik ulang apa pun ke bool, Anda dapat mencoba di konsol.!!('test')
,!!(5)
,!!(0)
input
pemilih, harus ada:input
untuk menyertakan pilihan, dll.data = $( "#my_form :input").filter(function () { return $(this).val() != ""; }).serialize();
Anda dapat melakukannya dengan regex ...
Kasus uji:
sumber
Saya telah menggunakan solusi di atas tetapi bagi saya itu tidak berhasil. Jadi saya telah menggunakan kode berikut
Semoga bermanfaat bagi seseorang
sumber
Saya akan melihat kode sumber untuk jQuery. Di baris versi terbaru 3287.
Saya mungkin menambahkan fungsi "serialize2" dan "serializeArray2". tentu saja sebutkan sesuatu yang berarti.
Atau cara yang lebih baik adalah menulis sesuatu untuk menarik vars yang tidak terpakai dari serializedFormStr. Beberapa regex yang mencari = & di tengah string atau diakhiri dengan = Ada penyihir regex?
PEMBARUAN: Saya lebih suka jawaban rogeriopvl (+1) ... terutama karena saya tidak dapat menemukan alat regex yang bagus saat ini.
sumber
Alternatif untuk solusi Rich :
Penjelasan:
.submit()
kait ke formsubmit
acarae.preventDefault()
mencegah formulir untuk dikirim.serializeArray()
memberi kita representasi array dari string kueri yang akan dikirim..filter()
menghapus nilai-nilai yang salah (termasuk kosong) dalam larik itu.$.param(query)
membuat representasi serial dan sesuai URL dari larik yang diperbaruiwindow.location.href
mengirimkan permintaansumber
Dalam coffeescript, lakukan ini:
sumber
Anda mungkin ingin melihat fungsi .each () jquery, yang memungkinkan Anda melakukan iterasi melalui setiap elemen selektor, jadi dengan cara ini Anda dapat memeriksa setiap bidang masukan dan melihat apakah kosong atau tidak dan kemudian menghapusnya dari formulir menggunakan element.remove (). Setelah itu Anda dapat membuat serial formulir.
sumber