Ho escogitato un modo pesantemente javascript per raggiungere uno stato di sola lettura per caselle di controllo e pulsanti di opzione. È testato con le versioni attuali di Firefox, Opera, Safari, Google Chrome, nonché con le versioni attuali e precedenti di IE (fino a IE7).
Perché non usare semplicemente la proprietà per disabili che chiedi? Quando si stampa la pagina, gli elementi di input disabilitati vengono visualizzati in grigio. Il cliente per il quale era stato implementato voleva che tutti gli elementi risultassero dello stesso colore.
Non sono sicuro di poter pubblicare qui il codice sorgente, poiché l'ho sviluppato mentre lavoravo per un'azienda, ma posso sicuramente condividere i concetti.
Con gli eventi onmousedown, è possibile leggere lo stato di selezione prima che l'azione del clic lo cambi. Quindi memorizzi queste informazioni e poi ripristini questi stati con un evento 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>
La parte javascript di questo funzionerebbe quindi in questo modo (di nuovo solo i concetti):
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;
}
Ora puoi abilitare / disabilitare i pulsanti di opzione / le caselle di controllo modificando le proprietà onclick e onmousedown degli elementi di input.