Maalesef 'basit' bir çözüm yok. Salt okunur özniteliği onay kutularına uygulanamaz. Onay kutusu hakkındaki W3 spesifikasyonunu okudum ve suçlu buldum:
Form gönderildiğinde bir denetimin geçerli bir değeri yoksa, kullanıcı aracılarının bunu başarılı bir denetim olarak ele alması gerekmez. ( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 )
Bu, denetlenmemiş durumun ve devre dışı bırakılmış durumun aynı çözümlenmiş değerle sonuçlanmasına neden olur.
- readonly = "salt okunur" onay kutuları için geçerli bir öznitelik değildir.
- Onclick = "event.preventDefault ();" onay kutusunun üzerinde tetiklendiği için her zaman iyi bir çözüm değildir. Ancak bazı durumlarda cazibesi olabilir.
- OnSubmit onay kutusunun etkinleştirilmesi bir çözüm değildir çünkü kontrol hala başarılı bir kontrol olarak değerlendirilmediği için değer ayrıştırılmayacaktır.
- HTML'nize aynı ada sahip başka bir gizli girdi eklemek işe yaramaz çünkü ilk denetim değeri, aynı ada sahip olduğu için ikinci denetim değerinin üzerine yazılır.
Bunu yapmanın tek tam kanıt yolu , formu gönderirken javascript ile aynı ada sahip gizli bir giriş eklemektir .
Bunun için yaptığım küçük parçacığı kullanabilirsiniz:
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);
}
}
}
Bu, belgedeki ilk formu arar, tüm girdileri toplar ve devre dışı bırakılmış girdileri arar. Devre dışı bırakılmış bir girdi bulunduğunda, parentNode'da aynı ada ve 'on' değerine (durumu 'işaretli' ise) ve '' (eğer durumu '' - işaretli değilse) gizli bir girdi oluşturulur.
Bu işlev, aşağıdaki gibi FORM öğesindeki 'onsubmit' olayı tarafından tetiklenmelidir:
<form id='ID' action='ACTION' onsubmit='disabled_checkbox();'>