Sayangnya tidak ada solusi 'sederhana'. Atribut readonly tidak dapat diterapkan ke kotak centang. Saya membaca spesifikasi W3 tentang kotak centang dan menemukan pelakunya:
Jika kontrol tidak memiliki nilai saat ini ketika formulir dikirimkan, agen pengguna tidak diharuskan untuk memperlakukannya sebagai kontrol yang berhasil. ( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 )
Ini menyebabkan keadaan tidak dicentang dan keadaan dinonaktifkan menghasilkan nilai parsing yang sama.
- readonly = "readonly" bukan atribut yang valid untuk kotak centang.
- onclick = "event.preventDefault ();" tidak selalu merupakan solusi yang baik karena dipicu pada kotak centang itu sendiri. Tapi itu bisa bekerja pesona di beberapa kesempatan.
- Mengaktifkan kotak centang diSubmit bukan solusi karena kontrol masih tidak diperlakukan sebagai kontrol yang sukses sehingga nilainya tidak akan diuraikan.
- Menambahkan input tersembunyi lain dengan nama yang sama di HTML Anda tidak berfungsi karena nilai kontrol pertama ditimpa oleh nilai kontrol kedua karena memiliki nama yang sama.
Satu-satunya cara penuh-bukti untuk melakukan ini adalah menambahkan input tersembunyi dengan nama yang sama dengan javascript saat mengirimkan formulir .
Anda dapat menggunakan potongan kecil yang saya buat untuk ini:
function disabled_checkbox() {
var theform = document.forms[0];
var theinputs = theform.getElementsByTagName('input');
var nrofinputs = theinputs.length;
for(var inputnr=0;inputnr<nrofinputs;inputnr++) {
if(theinputs[inputnr].disabled==true) {
var thevalueis = theinputs[inputnr].checked==true?"on":"";
var thehiddeninput = document.createElement("input");
thehiddeninput.setAttribute("type","hidden");
thehiddeninput.setAttribute("name",theinputs[inputnr].name);
thehiddeninput.setAttribute("value",thevalueis);
theinputs[inputnr].parentNode.appendChild(thehiddeninput);
}
}
}
Ini mencari formulir pertama dalam dokumen, mengumpulkan semua input dan mencari input yang dinonaktifkan. Ketika input yang dinonaktifkan ditemukan, input tersembunyi dibuat di parentNode dengan nama yang sama dan nilai 'on' (jika statusnya 'dicentang') dan '' (jika statusnya adalah '' - tidak dicentang).
Fungsi ini harus dipicu oleh acara 'kirim' di elemen FORM sebagai:
<form id='ID' action='ACTION' onsubmit='disabled_checkbox();'>