Saya telah menemukan cara javascript-berat untuk mencapai status readonly untuk kotak centang dan tombol radio. Ini diuji terhadap versi Firefox, Opera, Safari, Google Chrome saat ini, serta versi IE saat ini dan sebelumnya (turun ke IE7).
Mengapa tidak menggunakan saja properti yang dinonaktifkan yang Anda minta? Saat mencetak halaman, elemen input yang dinonaktifkan keluar dalam warna abu-abu. Pelanggan yang menerapkan ini ingin semua elemen memiliki warna yang sama.
Saya tidak yakin apakah saya boleh memposting kode sumber di sini, karena saya mengembangkan ini ketika bekerja untuk sebuah perusahaan, tetapi saya pasti dapat berbagi konsep.
Dengan acara onmousedown, Anda dapat membaca status pemilihan sebelum tindakan klik mengubahnya. Jadi, Anda menyimpan informasi ini dan kemudian memulihkan status ini dengan acara 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>
Bagian javascript ini kemudian akan berfungsi seperti ini (sekali lagi hanya konsepnya):
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;
}
Anda sekarang dapat mengaktifkan / menonaktifkan tombol radio / kotak centang dengan mengubah properti onclick dan onmousedown dari elemen input.