08 November 2007

How to disable / readOnly CRM fields / iframes

Sometimes we need to disable all fields in CRM, so a function could help!
Also, you don't want to diable INPUT/TEXTAREA nodes, because it will become unreadble (gray #808080) if you disable it, so I prefer to set those nodes readOnly. (only INPUT and TEXTAREA support readOnly property!)


/*
setDisabled function
1. set readOnly property for INPUT/TEXTAREA nodes
2. disable other nodes
id: element's Id
ignoreNodes: nodes can be ignored
nodesDisabled: bool, true = set disable/readonly
*/

function setDisabled(id, ignoreNodes, nodesDisabled)
{
var node, nodes;
nodes = id.getElementsByTagName('*');
if(!nodes)
return;

var i = nodes.length;
while (i--)
{
node = nodes[i];
if(node.nodeName && !(node.nodeName.toLowerCase() in ignoreNodes))
{
if((node.nodeName == "INPUT") || (node.nodeName == "TEXTAREA"))
{
node.readOnly = nodesDisabled;
}
else
{
node.disabled = nodesDisabled;
}
}
}
}

/*disable/readonly fields*/
setDisabled(document.getElementById("areaForm"), {table:'', iframe:'', div:'', form:'', col:'', colgroup:'', lable:'', span:'', tbody:'', body:'', tr:'', td:''}, true);

/*disable IFRAME*/
try
{
window.setTimeout(iframeDisabled, 3000);
}
catch(err)
{
alert("System busy, please try again later!" + err);
window.close();
}

function iframeDisabled()
{
setDisabled(document.frames("IFRAME_1").document.getElementById("mnuBar1"),{}, true);
}

8 comments:

Unknown said...

Nice work. This works great for me. However, can I specify that I want a particular field (in my case, a specific datetime field) to not be disabled/readonly?
Thanks

Jim Wang said...

Thanks Dubsport, the easy way is just enable this field on the end.

crmForm.all.Your_Field.disabled = false;

Anonymous said...

Great work, thanks. But I need to make a whole tab a readonly, how can i do this using your function?!

Anonymous said...

Unfortunately, this function doesn't fully cover the Notes field. If Notes is accessible (your function disables the Notes tab, but it might be necessary to make Notes readable), you will find that each Notes item has onfocus, onclick, ondblclick etc functionality that is not disabled by your function. Also, because you are using a Timeout (which fires only once), when you add a new note by double clicking on the "Click here to enter a new note..." link and saving it, all elements in the Notes IFrame become enabled, because the function is not re-called (it's only on the parent form load, not the IFrame onload).

Anyway, it's a useful function all the same.

Anonymous said...

Correction to the above post (I'm the same Anonymous that wrote the above!), if there is an existing note and you double click on it, things happen. Double clicking the "Click here to enter a new note..." is properly disabled.

Anonymous said...

How can i hide a tab accrding to the subject of the case when the case form loads

Mehul Mehta said...

Nice work jim, but just wondering any idea how to disable (not hide) entire section & how to disable just an iFrame?

Many Thanks,
mehul

Anonymous said...

酒店經紀PRETTY GIRL 台北酒店經紀人 ,禮服店 酒店兼差PRETTY GIRL酒店公關 酒店小姐 彩色爆米花酒店兼職,酒店工作 彩色爆米花酒店經紀, 酒店上班,酒店工作 PRETTY GIRL酒店喝酒酒店上班 彩色爆米花台北酒店酒店小姐 PRETTY GIRL酒店上班酒店打工PRETTY GIRL酒店打工酒店經紀 彩色爆米花