Al realizar permisos, se implementan principalmente las siguientes funciones:
1. Si el nodo es accesible, su nodo padre también debe ser accesible;
2. Si se puede acceder al nodo, también se puede acceder a sus nodos secundarios;
3. Si el nodo es inaccesible, sus nodos secundarios también lo serán.
Usar una estructura numérica con CheckBox puede brindar una buena experiencia de usuario, pero la dificultad de la programación también aumenta un poco. Si todo lo hace el servidor, definitivamente no funcionará si hace clic en él. Solo puede usar javascript. , lo cual es frustrante al depurar con javascript. Muy, una clase de palabra y recursividad frustrante. Solía usar el siguiente método.
//evento de verificación
función tree_oncheck(árbol)
{
var i;
var nodo=tree.getTreeNode(tree.clickedNodeIndex);
var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("marcado");
setcheck(nodo,Pmarcado);
setParent(nodo,Pmarcado);
//ventana.alert(Pmarcado);
documento.all.checked.value = "";
si (tree.getChildren().longitud > 0)
{
para (i=0;i<=tree.getChildren().length-1;i++)
{
si (tree.getChildren()[i].getAttribute("Comprobado"))
{
AddChecked(tree.getChildren()[i]);
}
FindCheckedFromNode(tree.getChildren()[i]);
}
}
}
//Establece
la función de selección de nodos secundarios setcheck(nodo,Pchecked)
{
var i;
var ChildNode=nueva matriz();
ChildNode=nodo.getChildren();
si(parseInt(ChildNode.length)==0)
{
devolver;
}
demás
{
para(i=0;i
var cNodo;
cNodo=NodoHijo[i];
cNode.setAttribute("Marcado",Pmarcado);
//cNode.Checked = Pchecked;
if(parseInt(cNode.getChildren().length)!=0)
{
setcheck(cNodo,Pmarcado);
}
}
}
}
//Establecer selección/cancelación de nodo secundario;
// Al mismo tiempo, es necesario establecer el estado del nodo principal (si se anula la selección, solo se configuran este nodo y todos sus contactos, y los contactos principales no están involucrados)
función setParent(nodo,Pc)
{
var parentNode = nodo.getParent();
si (nodo padre)
{
var parentNodeFather = parentNode.getParent();
si(padreNodoPadre)
{
setParent(nodopadre,Pc);
}
si (ordenador personal)
{parentNode.setAttribute("marcado",Pc);}
demás
{
checkBrother(parentNode,Pc,node.getAttribute("NodeData"))
}
}
}
//Comprueba si el subcontacto está seleccionado, si hay uno seleccionado, devuelve verdadero
//Verifique solo los nodos del primer nivel.
función checkBrother(parentNode,Pc,NodeData)
{
var childNodes = nueva matriz();
childNodes = parentNode.getChildren();
if(niñoNodos.longitud >0)
{
var bChecked = verdadero;
para(var i=0;i
if(childNodes[i].getAttribute("checked") == true && childNodes[i].getAttribute("NodeData") != NodeData)
{
//alert(i+childNodes[i].getAttribute("Texto"));
bMarcado = falso;
romper;
}
}
si (bmarcado)
{
parentNode.setAttribute("marcado",Pc);
}
demás
{
//Selecciona todos los nodos principales
setParent(nodopadre,!Pc)
}
}
demás
{
parentNode.setAttribute("marcado",Pc);
}
}
//Obtener el estado de todos los nodos
función FindCheckedFromNode(nodo)
{
var i = 0;
var nodos = nueva matriz();
nodos = nodo.getChildren();
para (i = 0; i <= nodos.longitud - 1; i++)
{
if (nodos[i].getAttribute("Comprobado"))
{
AddChecked(nodos[i]);
}
si (parseInt(nodos[i].getChildren().length) != 0 )
{
FindCheckedFromNode(nodos[i]);
}
}
}
//Agregar nodo seleccionado
función AddChecked(nodo)
{
document.all.checked.value += node.getAttribute("NodeData") + ",";
}
//-->
Este método tiene un gran problema, es decir, el CheckBox establecido por el cliente no se puede obtener en el lado del servidor. Ahora solo puede atravesar el árbol durante la verificación y colocar el valor marcado en un texto. el servidor, y luego el servidor analizará los caracteres 1@2 @
Ahora estoy usando asp.net2.0 y uso el siguiente método
función public_GetParentByTagName (elemento, nombre de etiqueta)
{
var padre = elemento.parentNode;
var nombreEtiquetasuperior = nombreEtiqueta.toUpperCase();
//Si este elemento no es la etiqueta deseada, continúa rastreando hacia arriba
while (padre && (parent.tagName.toUpperCase()!= UpperTagName))
{
padre = padre.parentNode? padre.parentNode: padre.parentElement;
}
padre que regresa;
}
//Establece el nodo principal del nodo Cheched: si el nodo es accesible, su nodo principal también debe ser accesible
función setParentChecked(objNode)
{
var objParentDiv = public_GetParentByTagName(objNode,"div");
if(objParentDiv==null || objParentDiv == "indefinido")
{
devolver;
}
var objID = objParentDiv.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("Nodos"));
objID = objID+"Casilla de verificación";
var objParentCheckBox = document.getElementById(objID);
if(objParentCheckBox==null || objParentCheckBox == "indefinido")
{
devolver;
}
if(objParentCheckBox.tagName!="ENTRADA" && objParentCheckBox.type == "casilla de verificación")
devolver;
objParentCheckBox.checked = verdadero;
setParentChecked(objParentCheckBox);
}
//Establece el nodo secundario del nodo como sin marcar: si el nodo es inaccesible, sus nodos secundarios también serán inaccesibles.
función setChildUnChecked(divID)
{
var objchild = divID.niños;
var recuento = objchild.length;
para(var i=0;i
var tempObj = objchild[i];
if(tempObj.tagName=="ENTRADA" && tempObj.type == "casilla de verificación")
{
tempObj.checked = falso;
}
setChildUnChecked(tempObj);
}
}
//Establece el nodo secundario del nodo marcado: si se puede acceder al nodo, también se puede acceder a sus nodos secundarios
función setChildChecked(divID)
{
var objchild = divID.niños;
var recuento = objchild.length;
para(var i=0;i
var tempObj = objchild[i];
if(tempObj.tagName=="ENTRADA" && tempObj.type == "casilla de verificación")
{
tempObj.checked = verdadero;
}
setChildChecked(tempObj);
}
}
//evento desencadenante
función VerificarEvento()
{
var objNode = event.srcElement;
if(objNode.tagName!="ENTRADA" || objNode.type!="casilla de verificación")
retorno;
si (objNode.checked==verdadero)
{
setParentChecked(objNode);
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Nodos");
if(objParentDiv==null || objParentDiv == "indefinido")
{
devolver;
}
setChildChecked(objParentDiv);
}
demás
{
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Nodos");
if(objParentDiv==null || objParentDiv == "indefinido")
{
devolver;
}
setChildUnChecked(objParentDiv);
}
} La mayor ventaja de este método es que el servidor puede obtener el valor Comprobado establecido por javascript. No es necesario descargar todos los árboles sin hacer clic. Puede descargarlos una vez en el servidor.
//Atravesar nodos secundarios
público vacío GetChildNode (nodo TreeNode)
{
foreach (nodo TreeNode en Node.ChildNodes)
{
si (nodo.Comprobado)
{
StrChecked += nodo.Valor+"@";
}
GetChildNode(nodo);
}
}
}Aún puedo obtener su valor de verificación