При выполнении разрешений в основном реализуются следующие функции:
1. Если узел доступен, его родительский узел также должен быть доступен;
2. Если узел доступен, то к его дочерним узлам также можно получить доступ;
3. Если узел недоступен, его дочерние узлы также недоступны.
Использование числовой структуры с CheckBox может обеспечить хороший пользовательский опыт, но при этом немного увеличивается сложность программирования. Если все это делает сервер, то если вы нажмете на него, это точно не сработает. , что расстраивает при отладке с помощью javascript. Very, класса слов, и разочаровывающей рекурсии. Раньше я использовал следующий метод.
У этого метода есть большая проблема: установленный клиентом флажок не может быть получен на стороне сервера. Теперь он может только пройти по дереву во время проверки и поместить значение «Проверено» в текст, а затем отправить его. сервер, а затем сервер будет анализировать символы 1@2 @
Теперь я использую asp.net2.0 и использую следующий метод
функция public_GetParentByTagName (элемент, имя тега)
{
вар родительский = element.parentNode;
вар UpperTagName = tagName.toUpperCase();
//Если этот элемент не является желаемым тегом, продолжаем трассировку вверх
while (родительский && (parent.tagName.toUpperCase() != UpperTagName))
{
родитель = родительский.родительскийузел? родительский.родительскийузел: родительский.родительскийэлемент;
}
вернуть родителя;
}
//Установка родительского узла узла. Cheched — если узел доступен, его родительский узел также должен быть доступен.
функция setParentChecked(objNode)
{
вар objParentDiv = public_GetParentByTagName(objNode,"div");
if(objParentDiv==null || objParentDiv == "не определено")
{
возвращаться;
}
var objID = objParentDiv.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("Узлы"));
objID = objID+"Флажок";
вар objParentCheckBox = document.getElementById(objID);
if(objParentCheckBox==null || objParentCheckBox == "не определено")
{
возвращаться;
}
if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "флажок")
возвращаться;
objParentCheckBox.checked = правда;
setParentChecked(objParentCheckBox);
}
//Устанавливаем дочерний узел узла как отключенный — если узел недоступен, его дочерние узлы также будут недоступны.
функция setChildUnChecked (divID)
{
вар objchild = divID.children;
вар счетчик = objchild.length;
for(var i=0;i
вар tempObj = objchild[i];
if(tempObj.tagName=="INPUT" && tempObj.type == "флажок")
{
tempObj.checked = ложь;
}
setChildUnChecked (tempObj);
}
}
//Устанавливаем дочерний узел узла как проверенный — если к узлу можно получить доступ, его дочерние узлы также будут доступны
функция setChildChecked(divID)
{
вар objchild = divID.children;
вар счетчик = objchild.length;
for(var i=0;i
вар tempObj = objchild[i];
if(tempObj.tagName=="INPUT" && tempObj.type == "флажок")
{
tempObj.checked = правда;
}
setChildChecked (tempObj);
}
}
// запускаем событие
функция CheckEvent()
{
var objNode = event.srcElement;
if(objNode.tagName!="INPUT" || objNode.type!="флажок")
return
if(objNode.checked==true)
{
setParentChecked(objNode);
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Узлы");
if(objParentDiv==null || objParentDiv == "не определено")
{
возвращаться;
}
setChildChecked (objParentDiv);
}
еще
{
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Узлы");
if(objParentDiv==null || objParentDiv == "не определено")
{
возвращаться;
}
setChildUnChecked (objParentDiv);
}
}Самым большим преимуществом этого метода является то, что сервер может получить значение «Проверено», установленное с помощью JavaScript. Нет необходимости загружать все деревья без нажатия кнопки. Вы можете просто загрузить их один раз на сервер.
//Обходим дочерние узлы
общественная недействительность GetChildNode (узел TreeNode)
{
foreach (узел TreeNode в Node.ChildNodes)
{
если (узел.Проверено)
{
StrChecked += node.Value+"@";
}
GetChildNode (узел);
}
}
}Я все еще могу получить его проверочное значение