Here's an option for you to use.
Put the below code into your page. Then called the javascript function
enableFormElement on page load. Use the below function call:
enableFormElement( <form element>, <Is the element editable (true/false)> )
That will allow you to make checkbox's, radio button, textboxs, textareas,
etc, ALL either editable or not.
Now don't say I never gave you anything!
Enjoy
Chaitanya Marvici
Code below:
----------------------------------------------------------------------------
------------------------------------------------------------------
function enableFormElement( element, editable ) {
if( element.length && ( ( element.name + "" ) == "undefined" ) ) { //This is
used if a group of elements, all with the same name
for( var x = 0; x < element.length; x++ ) { //is sent to the function. It
will loop through and recursively
enableFormElement( element[x], editable ); //call this function to correctly
turn the readonly stuff off/on.
}
} else {
if( ( element.type != "hidden" ) && ( element.type != "button" ) && (
element.type != "image") ) {
var focusStr = element.onfocus + "";
var clickStr = element.onclick + "";
var changeStr = element.onchange + "";
var focusFunction, clickFunction, changeFunction;
focusStr = trim( focusStr.substring( focusStr.indexOf("{") + 1,
focusStr.lastIndexOf("}") ) );
clickStr = trim( clickStr.substring( clickStr.indexOf("{") + 1,
clickStr.lastIndexOf("}") ) );
if( element.type.indexOf( "select" ) >= 0 ) {
changeStr = trim( changeStr.substring( changeStr.indexOf("{") + 1,
changeStr.lastIndexOf("}") ) );
}
if( ! editable ) {
if( ( browserType == IE ) || ( browserType == Nav6 ) ) { element.readonly =
true; }
focusFunction = new Function( "e", "blurElement( this );\n" + focusStr )
clickFunction = new Function( "e", "blurElement( this );\n" + clickStr )
if( element.type == "radio" || element.type == "checkbox" ) {
element.checkedTemp = element.checked;
}
if( element.type.indexOf( "select" ) >= 0 ) {
changeFunction = new Function( "e", "resetElement( this );\n" + changeStr )
}
} else {
var strStart;
if( ( browserType == IE ) || ( browserType == Nav6 ) ) { element.readonly =
false; }
strStart = focusStr.lastIndexOf( "blurElement( this );" );
if( strStart != -1 ) { focusFunction = new Function( "e", focusStr.substr(
strStart + "blurElement( this );".length, focusStr.length ) ) }
strStart = clickStr.lastIndexOf( "blurElement( this );" );
if( strStart != -1 ) { clickFunction = new Function( "e", clickStr.substr(
strStart + "blurElement( this );".length, clickStr.length ) ) }
if( element.type.indexOf( "select" ) >= 0 ) {
strStart = changeStr.lastIndexOf( "resetElement( this );" );
if( strStart != -1 ) { changeFunction = new Function( "e",
changeStr.substr( strStart + "resetElement( this );".length,
changeStr.length ) ) }
}
}
if( typeof( focusFunction ) != "undefined" ) { element.onfocus =
focusFunction; }
if( typeof( clickFunction ) != "undefined" ) { element.onclick =
clickFunction; }
if( element.type.indexOf( "select" ) >= 0 ) {
if( typeof( changeFunction ) != "undefined" ) { element.onchange =
changeFunction; }
}
} // End check for form element type
}
}
function enableElements( f ) {
var numOfElements = f.length
var setFocus = false;
var proxyMarker = "Proxy";
for ( e = 0; e < numOfElements; e++ ) {
var visibleElement = f.elements[e];
var valueElement = f.elements[e];
if ( visibleElement.type=="checkbox") {
var visibleElementName = visibleElement.name;
if ( visibleElementName.indexOf(proxyMarker) >= 0 ) { // if proxy checkbox
var valueElementName = visibleElementName.substring( 0,
visibleElementName.indexOf(proxyMarker) );
valueElement = f.elements[ valueElementName ];
}
}
enableFormElement( visibleElement, isElementEditable( valueElement ) );
}
}
function blurElement( element ) {
if( element.type == "radio" || element.type == "checkbox" ) {
if( eval( "document." + element.form.name + "." + element.name +
".length" ) ) {
for( var x = 0; x < eval( "document." + element.form.name + "." +
element.name + ".length" ); x++ ) {
eval( "document." + element.form.name + "." + element.name + "[" + x +
"].checked = " + "document." + element.form.name + "." + element.name + "["
+ x + "].checkedTemp ? true : false;" );
}
} else {
element.checked = element.checkedTemp ? true : false;
}
}
if( element.type.indexOf( "select" ) >= -1 ) {
element.selectIndexTemp = element.selectedIndex;
}
element.blur();
}
function resetElement( element ) {
if( element.type.indexOf( "select" ) >= -1 ) {
element.selectedIndex = element.selectIndexTemp;
}
}
"/.." <no*******@ix.netcom.com> wrote in message
news:v0********************************@4ax.com...
By Mon, 21 Jul 2003 18:06:43 -0700, "Steve C. Orr, MCSD"
<St***@Orr.net> decided to post
"Re: Read Only Checkbox(list) ?" to
microsoft.public.dotnet.framework.aspnet:
You might consider this is a bit of a hack, but how about changing the
background color of the page or panel so there is greater contrast with
thegrayed out checkboxes? Simplicity sells.
Thanks for the suggestion,
but since it goes out to serious clients, I think that I'm looking
for a bit more serious of a solution. I had a thought that I should
look into making a custom control. Don't know anything about it, but
it's probably a reasonable way to go.
My other thought is to take screenshots of a checked and unchecked
checkbox, they wind up less than 1KB (16px X 16px: bmp) in size,
and arrange like 85 pairs of them, then programmatically set the
appropriate one visible based on the boolean value from the database.
But that seems extreme. It's probably close to what a custom control
would actually do.
There has to be a frequent solution to this!!!
(Displaying a boolean value in a 'read-only' checkboxlist -- I need
to do 85 or so of the items on a report page.)
Ciao,
/ts