К сожалению, не существует «простого» решения. Атрибут только для чтения не может быть применен к флажкам. Я прочитал спецификации W3 о флажке и нашел виновника:
Если элемент управления не имеет текущего значения при отправке формы, пользовательские агенты не обязаны рассматривать его как успешный элемент управления. (http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2)
Это приводит к тому, что непроверенное состояние и отключенное состояние приводят к одному и тому же проанализированному значению.
- readonly = "readonly" не является допустимым атрибутом для флажков.
- OnClick = "event.preventDefault ();" не всегда хорошее решение, поскольку оно срабатывает на самом флажке. Но в некоторых случаях это может сработать чарами.
- Включение флажка onSubmit не является решением, поскольку элемент управления по-прежнему не рассматривается как успешный элемент управления, поэтому значение не будет проанализировано.
- Добавление другого скрытого ввода с тем же именем в HTML не работает, поскольку первое значение элемента управления перезаписывается вторым значением элемента управления, поскольку оно имеет то же имя.
Единственный полный способ сделать это - добавить скрытый ввод с тем же именем с помощью javascript при отправке формы .
Вы можете использовать небольшой фрагмент, который я сделал для этого:
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);
}
}
}
Это ищет первую форму в документе, собирает все входные данные и ищет отключенные входные данные. Когда обнаружен отключенный вход, в parentNode создается скрытый вход с тем же именем и значением «on» (если его состояние «проверено») и «» (если это состояние «- не проверено»).
Эта функция должна вызываться событием 'onsubmit' в элементе FORM как:
<form id='ID' action='ACTION' onsubmit='disabled_checkbox();'>