Apakah perilaku standar untuk browser hanya mengirim data nilai input kotak centang jika diperiksa pada pengiriman formulir?
Dan jika tidak ada data nilai yang diberikan, apakah nilai default selalu "menyala"?
Dengan anggapan hal di atas benar, apakah perilaku konsisten ini di semua browser?
<select>
dengan dua opsion
danoff
:-)Dalam HTML, setiap
<input />
elemen dikaitkan dengan satu pasangan nama dan nilai (tetapi tidak unik). Pasangan ini dikirim dalam permintaan berikutnya (dalam hal ini, badan permintaan POST) hanya jika<input />
"berhasil".Jadi, jika Anda memiliki input ini di
<form>
DOM Anda :Akan menghasilkan pasangan nama + nilai ini yang akan dikirimkan ke server:
Perhatikan itu:
two
dansix
dikeluarkan karena mereka memilikidisabled
set atribut.three
dikirim dua kali karena memiliki dua input yang valid dengan nama yang sama.four
tidak dikirim karena itu adalahcheckbox
yang tidakchecked
six
tidak dikirim meskipunchecked
karenadisabled
atribut memiliki prioritas lebih tinggi.seven
tidak memilikiname=""
pengirimannya atribut, sehingga tidak disampaikan.Sehubungan dengan pertanyaan Anda: Anda dapat melihat bahwa kotak centang yang tidak dicentang tidak akan mengirim pasangan nama + nilainya ke server - tetapi input lain yang memiliki nama yang sama akan dikirimkan bersamanya.
Kerangka kerja seperti ASP.NET MVC mengatasi ini dengan (diam-diam) memasangkan setiap
checkbox
input denganhidden
input dalam HTML yang diberikan, seperti:Memberikan:
Jika pengguna tidak mencentang kotak centang, maka yang berikut akan dikirim ke server:
Jika pengguna mencentang kotak centang, maka keduanya akan dikirim:
Tetapi server akan mengabaikan
=false
versi karena melihat=true
versi, dan jadi jika tidak melihat=true
itu dapat menentukan bahwa kotak centang diberikan dan bahwa pengguna tidak memeriksanya - sebagai lawan dariSomeBooleanProperty
input yang tidak diberikan sama sekali.sumber
[]
di akhir nama input, perilaku default adalah hanya mengirimkan elemen terakhir dengan nama itu, jadi selama input tersembunyi ada sebelum kotak centang, itu akan berfungsi.[]
akhiran bukan bagian dari spesifikasi HTML dan browser tidak memperlakukannya secara khusus. Tanpa[]
PHP hanya akan memungkinkan akses ke nilai tunggal (nilai terakhir) alih-alih semua nilai.Jika kotak centang tidak dicentang maka itu tidak berkontribusi pada data yang dikirim pada pengiriman formulir.
HTML5 bagian 4.10.22.4 Membuat kumpulan data formulir menjelaskan cara pembuatan data formulir:
dan kemudian nilai default
on
ditentukan jikavalue
tidak ada:Dengan demikian kotak centang yang tidak dicentang dilewati selama konstruksi data formulir.
Perilaku serupa diperlukan di bawah HTML4 . Masuk akal untuk mengharapkan perilaku ini dari semua browser yang sesuai.
sumber
Kotak centang memposting nilai 'on' jika dan hanya jika kotak centang dicentang. Insted dari menangkap nilai kotak centang Anda dapat menggunakan input tersembunyi
JS :
HTML :
sumber
Ya, karena jika tidak maka tidak akan ada cara yang solid untuk menentukan apakah kotak centang itu benar-benar dicentang atau tidak (jika itu mengubah nilainya, kasing mungkin ada ketika nilai yang Anda inginkan jika dicentang akan sama dengan yang ada saat itu. ditukar ke).
Jawaban lain mengonfirmasi bahwa "aktif" adalah default. Namun, jika Anda tidak tertarik dengan nilainya, cukup gunakan:
sumber
Dari HTML 4 spec, yang harus konsisten di hampir semua browser:
http://www.w3.org/TR/html401/interact/forms.html#checkbox
Berhasil didefinisikan sebagai berikut:
sumber
tipe input = "tersembunyi" name = "is_main" value = "0"
tipe input = "kotak centang" name = "is_main" value = "1"
sehingga Anda dapat mengontrol seperti ini seperti yang saya lakukan dalam aplikasi. jika memeriksa maka kirim nilai 1 jika tidak 0
sumber
Tidak ada jawaban di atas yang memuaskan saya. Saya menemukan solusi terbaik adalah dengan memasukkan input tersembunyi sebelum setiap input kotak centang dengan nama yang sama.
<input type="hidden" name="foo[]" value="off"/>
<input type="checkbox" name="foo[]"/>
Kemudian di sisi server, menggunakan sedikit algoritma Anda bisa mendapatkan sesuatu yang lebih seperti HTML harus menyediakan.
Ini akan menjadi input mentah
Dan fungsinya akan kembali
sumber
Saya memiliki halaman (formulir) yang secara dinamis menghasilkan kotak centang sehingga jawaban ini sangat membantu. Solusi saya sangat mirip dengan banyak orang di sini tetapi saya tidak dapat berpikir bahwa ini lebih mudah untuk diterapkan.
Pertama saya meletakkan kotak input tersembunyi sesuai dengan kotak centang saya, yaitu
Sekarang jika semua
checkboxes
tidak dipilih maka nilai yang dikembalikan oleh bidang tersembunyi semua akan mati.Misalnya, di sini dengan lima kotak centang yang disisipkan secara dinamis, bentuk
POSTS
nilai-nilai berikut:Ini menunjukkan bahwa hanya kotak centang 3 dan 4 yang
on
atauchecked
.Pada dasarnya, dummy atau field input tersembunyi hanya menunjukkan bahwa semuanya tidak aktif kecuali ada "on" di bawah indeks off, yang kemudian memberi Anda indeks yang Anda butuhkan tanpa satu baris kode sisi klien.
.
sumber
Sama seperti varian ASP.NET, kecuali letakkan input tersembunyi dengan nama yang sama sebelum kotak centang yang sebenarnya (dengan nama yang sama). Hanya nilai terakhir yang akan dikirim. Dengan cara ini jika kotak dicentang maka nama dan nilai "on" dikirim, sedangkan jika tidak dicentang maka nama input tersembunyi terkait dan nilai apa pun yang Anda ingin berikan akan dikirim. Pada akhirnya Anda akan mendapatkan array $ _POST untuk dibaca, dengan semua elemen yang dicentang dan tidak dicentang di dalamnya, nilai "on" dan "false", tanpa kunci duplikat. Mudah diproses dalam PHP.
sumber
Memiliki masalah yang sama dengan kotak centang yang tidak dicentang yang tidak akan dikirim pada formulir kirim, saya keluar dengan solusi lain daripada mirror item kotak centang.
Dapatkan semua kotak centang yang tidak dicentang dengan
sumber
Saya menyelesaikan masalah dengan kode ini:
Formulir HTML
dan fungsi javascript dengan mengubah bentuk nilai kotak centang:
dan server memeriksa apakah posting data "on" atau "off". Saya menggunakan java playframework
sumber