怎样用客户端JScript实现区域的只读属性

有些时候,我们需要把窗体(FORM)里的内容设计成只读(read-only)属性,用客户端编程的方式可以实现这个目的:

实施考虑因素:最简单的办法是可以遍历所有节点,把它们都disabled掉。这样做的缺点是TEXT区域背景会呈现灰色(#808080),显示效果不好(当然我们可以修改CSS文件改变背景,但这不是一个好的方法)。其实INPUT和TEXTAREA节点有一个属性是readOnly,这样既方便阅读,也能防止用户修改数据,是一个好办法。

所以我们可以readOnly掉INPUT和TEXTAREA,对于其他节点可以disabled掉。下面是代码,支持CRM 3.0/4.0

/*
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!");
    window.close();
}


function iframeDisabled()
{
    setDisabled(document.frames(
"IFRAME_1").document.getElementById("mnuBar1"),{}true);
}
posted @ 2008-01-21 06:57  MicrosoftCRM  阅读(963)  评论(3)    收藏  举报