Ao conceder permissões, as seguintes funções são implementadas principalmente:
1. Se o nó estiver acessível, seu nó pai também deverá estar acessível;
2. Se o nó estiver acessível, seus nós filhos também poderão ser acessados;
3. Se o nó estiver inacessível, seus nós filhos também estarão inacessíveis.
Usar uma estrutura numérica com CheckBox pode proporcionar uma boa experiência ao usuário, mas a dificuldade de programação também aumenta um pouco. Se tudo for feito pelo servidor, definitivamente não funcionará se você clicar nele. , o que é frustrante ao depurar com javascript Very, uma classe de palavras, e recursão frustrante que usei o método a seguir.
//evento oncheck
função tree_oncheck(árvore)
{
var eu;
var node=tree.getTreeNode(tree.clickedNodeIndex);
var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("verificado");
setcheck(nó,Pchecked);
setParent(node,Pchecked);
//window.alert(Pchecked);
document.all.checked.value = "";
if (tree.getChildren().length > 0)
{
para (i=0;i<=tree.getChildren().length-1;i++)
{
if (tree.getChildren()[i].getAttribute("Verificado"))
{
AddChecked(tree.getChildren()[i]);
}
FindCheckedFromNode(tree.getChildren()[i]);
}
}
}
//Definir
função de seleção de nó filho setcheck(node,Pchecked)
{
var eu;
var ChildNode=new Array();
ChildNode=node.getChildren();
if(parseInt(ChildNode.length)==0)
{
retornar;
}
outro
{
for(i=0;i
var cNode;
cNode=ChildNode[i];
cNode.setAttribute("Verificado",Pverificado);
//cNode.Checked = Pchecked;
if(parseInt(cNode.getChildren().length)!=0)
{
setcheck(cNode,Pchecked);
}
}
}
}
//Definir seleção/cancelamento do nó filho;
//Ao mesmo tempo, o status do nó pai precisa ser definido (se estiver desmarcado, apenas este nó e todos os seus contatos serão definidos e os contatos pai não serão envolvidos)
função setParent(nó,Pc)
{
var parentNode = node.getParent();
if(paiNode)
{
var parentNodeFather = parentNode.getParent();
if(parentNodePai)
{
setParent(parentNode,Pc);
}
se(PC)
{parentNode.setAttribute("verificado",Pc);}
outro
{
checkBrother(parentNode,Pc,node.getAttribute("NodeData"))
}
}
}
//Verifica se o subcontato está selecionado, se algum estiver selecionado, retorne verdadeiro
//Verifica apenas os nós de primeiro nível.
verificação de funçãoIrmão(parentNode,Pc,NodeData)
{
var childNodes = new Array();
childNodes = parentNode.getChildren();
if(childNodes.length >0)
{
var bChecked = verdadeiro;
for(var i=0;i
if(childNodes[i].getAttribute("checked") == true && childNodes[i].getAttribute("NodeData") != NodeData)
{
//alert(i+childNodes[i].getAttribute("Texto"));
bVerificado = falso;
quebrar;
}
}
if(bChecked)
{
parentNode.setAttribute("verificado",Pc);
}
outro
{
//Seleciona todos os nós pais
setParent(parentNode,!Pc)
}
}
outro
{
parentNode.setAttribute("verificado",Pc);
}
}
//Obtém o status de todos os nós
função FindCheckedFromNode(nó)
{
var eu = 0;
var nós = new Array();
nós = node.getChildren();
para (i = 0; i <= nós.comprimento - 1; i++)
{
if (nós[i].getAttribute("Verificado"))
{
AddChecked(nós[i]);
}
if (parseInt(nodes[i].getChildren().length) != 0 )
{
FindCheckedFromNode(nós[i]);
}
}
}
//Adiciona o nó selecionado
função AddChecked(nó)
{
document.all.checked.value += node.getAttribute("NodeData") + ",";
}
//-->
Este método tem um grande problema, ou seja, o CheckBox definido pelo cliente não pode ser obtido no lado do servidor. Agora ele só pode percorrer a árvore durante o Check e colocar o valor Checked em um texto. o servidor, e então o servidor analisará os caracteres 1@2 @
Agora estou usando asp.net2.0 e uso o seguinte método
função public_GetParentByTagName(elemento, tagName)
{
var pai = element.parentNode;
var UpperTagName = tagName.toUpperCase();
//Se este elemento não for a tag desejada, continue rastreando
while (pai && (parent.tagName.toUpperCase() != UpperTagName))
{
pai = pai.parentNode? pai.parentNode: pai.parentElement;
}
retornar pai;
}
//Definir o nó pai do nó verificado - se o nó estiver acessível, seu nó pai também deverá estar acessível
função setParentChecked(objNode)
{
var objParentDiv = public_GetParentByTagName(objNode,"div");
if(objParentDiv==null || objParentDiv == "indefinido")
{
retornar;
}
var objID = objParentDiv.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("Nós"));
objID = objID+"CheckBox";
var objParentCheckBox = document.getElementById(objID);
if(objParentCheckBox==null || objParentCheckBox == "indefinido")
{
retornar;
}
if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "caixa de seleção")
retornar;
objParentCheckBox.checked = verdadeiro;
setParentChecked(objParentCheckBox);
}
//Defina o nó filho do nó como desmarcado - se o nó estiver inacessível, seus nós filhos também estarão inacessíveis.
função setChildUnChecked(divID)
{
var objchild = divID.filhos;
var contagem = objchild.length;
for(var i=0;i
var tempObj = objchild[i];
if(tempObj.tagName=="ENTRADA" && tempObj.type == "caixa de seleção")
{
tempObj.checked = falso;
}
setChildUnChecked(tempObj);
}
}
//Defina o nó filho do nó verificado - se o nó puder ser acessado, seus nós filhos também poderão ser acessados
função setChildChecked(divID)
{
var objchild = divID.filhos;
var contagem = objchild.length;
for(var i=0;i
var tempObj = objchild[i];
if(tempObj.tagName=="ENTRADA" && tempObj.type == "caixa de seleção")
{
tempObj.checked = verdadeiro;
}
setChildChecked(tempObj);
}
}
//aciona evento
função CheckEvent()
{
var objNode = event.srcElement;
if(objNode.tagName!="INPUT" || objNode.type!="caixa de seleção")
retornar
se(objNode.checked==true)
{
setParentChecked(objNode);
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Nodes");
if(objParentDiv==null || objParentDiv == "indefinido")
{
retornar;
}
setChildChecked(objParentDiv);
}
outro
{
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Nodes");
if(objParentDiv==null || objParentDiv == "indefinido")
{
retornar;
}
setChildUnChecked(objParentDiv);
}
} A maior vantagem deste método é que o servidor pode obter o valor Checked definido por javascript. Não há necessidade de baixar todas as árvores sem clicar.
//Percorre os nós filhos
public void GetChildNode (Nó TreeNode)
{
foreach (nó TreeNode em Node.ChildNodes)
{
if (nó. Verificado)
{
StrChecked += node.Value+"@";
}
GetChildNode(nó);
}
}
}Ainda consigo obter o valor do Check