次實現的功能只能使選中/不選中父結點時,令它的所有子結點都設定為跟父結點一樣的狀態。
有時候,在選中一個子結點時,我們希望它的父結點也同時被選中。如下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");