Я придумав важкий для Javascript спосіб досягти стану лише для читання для прапорців і радіо кнопок. Він протестований на поточних версіях Firefox, Opera, Safari, Google Chrome, а також на поточній та попередній версіях IE (аж до IE7).
Чому б просто не скористатись інвалідом, який ви запитуєте? Під час друку сторінки відключені елементи введення виходять сірим кольором. Замовник, для якого це було реалізовано, хотів, щоб всі елементи вийшли одного кольору.
Я не впевнений, чи дозволять мені розміщувати тут вихідний код, оскільки я розробляв це під час роботи в компанії, але я точно можу поділитися концепціями.
За допомогою подій onmousedown ви можете прочитати стан вибору, перш ніж дія кліку змінить його. Таким чином, ви зберігаєте цю інформацію, а потім відновите ці стани за допомогою події onclick.
<input id="r1" type="radio" name="group1" value="r1" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);" checked="checked">Option 1</input>
<input id="r2" type="radio" name="group1" value="r2" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);">Option 2</input>
<input id="r3" type="radio" name="group1" value="r3" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);">Option 3</input>
<input id="c1" type="checkbox" name="group2" value="c1" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);" checked="checked">Option 1</input>
<input id="c2" type="checkbox" name="group2" value="c2" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);">Option 2</input>
<input id="c3" type="checkbox" name="group2" value="c3" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);" checked="checked">Option 3</input>
Потім частина цього JavaScript працюватиме так (знову лише поняття):
var selectionStore = new Object(); // keep the currently selected items' ids in a store
function storeSelectedRadiosForThisGroup(elementName) {
// get all the elements for this group
var radioOrSelectGroup = document.getElementsByName(elementName);
// iterate over the group to find the selected values and store the selected ids in the selectionStore
// ((radioOrSelectGroup[i].checked == true) tells you that)
// remember checkbox groups can have multiple checked items, so you you might need an array for the ids
...
}
function setSelectedStateForEachElementOfThisGroup(elementName) {
// iterate over the group and set the elements checked property to true/false, depending on whether their id is in the selectionStore
...
// make sure you return false here
return false;
}
Тепер ви можете увімкнути / відключити радіо кнопки / прапорці, змінивши властивості onclick та onmousedown вхідних елементів.