Leider gibt es keine "einfache" Lösung. Das Attribut readonly kann nicht auf Kontrollkästchen angewendet werden. Ich habe die W3-Spezifikation über das Kontrollkästchen gelesen und den Schuldigen gefunden:
Wenn ein Steuerelement beim Senden des Formulars keinen aktuellen Wert hat, müssen Benutzeragenten es nicht als erfolgreiches Steuerelement behandeln. ( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 )
Dies führt dazu, dass der deaktivierte und der deaktivierte Status denselben analysierten Wert ergeben.
- readonly = "readonly" ist kein gültiges Attribut für Kontrollkästchen.
- onclick = "event.preventDefault ();" ist nicht immer eine gute Lösung, da sie über das Kontrollkästchen selbst ausgelöst wird. Aber es kann in einigen Fällen Zauber wirken.
- Das Aktivieren des Kontrollkästchens onSubmit ist keine Lösung, da das Steuerelement immer noch nicht als erfolgreiches Steuerelement behandelt wird und der Wert nicht analysiert wird.
- Das Hinzufügen einer weiteren versteckten Eingabe mit demselben Namen in Ihrem HTML-Code funktioniert nicht, da der erste Steuerwert durch den zweiten Steuerwert überschrieben wird, da er denselben Namen hat.
Die einzige vollständige Möglichkeit, dies zu tun, besteht darin , beim Absenden des Formulars eine versteckte Eingabe mit demselben Namen und Javascript hinzuzufügen .
Sie können das kleine Snippet verwenden, das ich dafür gemacht habe:
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);
}
}
}
Dies sucht nach dem ersten Formular im Dokument, sammelt alle Eingaben und sucht nach deaktivierten Eingaben. Wenn eine deaktivierte Eingabe gefunden wird, wird im parentNode eine versteckte Eingabe mit demselben Namen und dem Wert 'on' (wenn der Status 'geprüft' ist) und '' (wenn der Status '' ist - nicht geprüft) erstellt.
Diese Funktion sollte durch das Ereignis 'onsubmit' im FORM-Element ausgelöst werden als:
<form id='ID' action='ACTION' onsubmit='disabled_checkbox();'>