Wymyśliłem sposób na javascript, aby osiągnąć stan tylko do odczytu dla pól wyboru i przycisków opcji. Jest testowany z bieżącymi wersjami Firefox, Opera, Safari, Google Chrome, a także z bieżącymi i poprzednimi wersjami IE (do IE7).
Dlaczego po prostu nie skorzystasz z właściwości niepełnosprawnych, o którą pytasz? Podczas drukowania strony wyłączone elementy wejściowe są wyświetlane w szarym kolorze. Klient, dla którego zostało to wdrożone, chciał, aby wszystkie elementy miały ten sam kolor.
Nie jestem pewien, czy wolno mi opublikować kod źródłowy tutaj, ponieważ opracowałem go podczas pracy dla firmy, ale z pewnością mogę podzielić się koncepcjami.
W przypadku zdarzeń onmousedown możesz odczytać stan zaznaczenia, zanim zmieni go działanie kliknięcia. Więc przechowujesz te informacje, a następnie przywracasz te stany za pomocą zdarzenia 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>
Część javascript będzie działać w ten sposób (ponownie tylko pojęcia):
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;
}
Możesz teraz włączyć / wyłączyć przyciski opcji / pola wyboru, zmieniając właściwości onclick i onmousedown elementów wejściowych.