上次实现的功能只能使选中/不选中父结点时,令它的所有子结点都设置为跟父结点一样的状态。
有时候,在选中一个子结点时,我们希望它的父结点也同时被选中。如下javascript代码可以实现这个功能:
//for treeview controller,其中pageTV为treeview对象
function tree_oncheck()
{
var node = pageTV.getTreeNode(event.treeNodeIndex);
var Pchecked = node.getAttribute("checked");
if (Pchecked == true)
{
setfathercheck(node); //这个函数实现了上述的附加功能
}
setcheck(node, Pchecked);
pageTV.queueEvent('oncheck', node.getNodeIndex());
}
function setcheck(node, Pc)
{
var ChildNode = new Array();
ChildNode = node.getChildren();
if (parseInt(ChildNode.length) != 0)
{
for (var i = 0; i < ChildNode.length; i++)
{
var cNode = ChildNode[i];
if (cNode.getAttribute("checked") != Pc)
{
if (parseInt(cNode.getChildren().length) != 0)
setcheck(cNode, Pc);
cNode.setAttribute("checked", Pc);
pageTV.queueEvent('oncheck', cNode.getNodeIndex());
}
}
}
}
function setfathercheck(node)
{
var FatherNode;
FatherNode = node.getParent();
if (FatherNode != null )
{
if (FatherNode.getAttribute("checked") != true)
{
setfathercheck(FatherNode);
FatherNode.setAttribute("checked", true);
pageTV.queueEvent('oncheck', FatherNode.getNodeIndex());
}
}
}
需要修改微软treeview控件的一个Bug
需要修改inetpub\wwwroot\webctrl_client\1_0\treeview.htc。
把function doCheckboxClick(el)中的第一行,
el.checked = !el.checked;
改成:
el.checked = !el.getAttribute("checked");