那位大哥帮忙解决一下有关生成树状三级菜单的问题(附原码,分不够可在加)

nyh800201002 2003-05-23 02:53:42
下面的程序是生成二级菜单的,那位帮忙分析一下,如何实现生成三级菜单,问题是
我的二级菜单有的有三级,有的没有,动态的;
ggjj们救救我把,不燃我今天死定拉


<SCRIPT language="javascript" id="clientEventHandlersJS">
<!--

function InitTB() {
var arrRoleData = new Array();
var arrThs = new Array();
var arrTypeName = new Array;
var i;
arrTypeName[1] = new Array;
arrTypeName[0] = new Array;

var strtmp ="<%=strtmp%>"; //主菜单
arrTypeName[1] = strtmp.split(",");

for(i=0;i<arrTypeName[1].length;i++)
{arrTypeName[0][i] = i;}

arrThs[0] = " ";
arrThs[1] = "名称";
arrThs[2] = "功能";

var intright=28;
var strmain="<%=strmain%>";//主菜单Appertain
var strid="<%=strid%>";//子菜单A01
var strname="<%=strname%>";//子菜单名称
var strdes="<%=strdes%>";//功能
var strchk="<%=strchk%>";//是否被选中

var arrmain = new Array();//主菜单数组
var arrid = new Array();//子菜单A01数组
var arrname = new Array();//子菜单名称数组
var arrdes = new Array();//功能数组
var arrchk = new Array();//是否被选中数组
var arrp=new Array();
arrmain=strmain.split(",")
arrid=strid.split(",")
arrname=strname.split(",")
arrdes=strdes.split(",")
arrchk=strchk.split(",")

var p;

for(i=0;i<intright+1;i++)
{p=arrRoleData.length;
arrRoleData[p] = new Array();
arrRoleData[p][0] = arrmain[i];
arrRoleData[p][1] = arrname[i];
arrRoleData[p][2] = arrdes[i];
if(String(arrchk[i])=="True")
arrRoleData[p][3] = true;
else
arrRoleData[p][3] = false;
arrRoleData[p][4] = arrid[i];
arrRoleData[p][5] = arrp[i];
}

var arrWidth = new Array();
arrWidth[0] = "25px";
arrWidth[1] = "215";
arrWidth[2] = "215";

divOuter.innerHTML = getTableHTML(arrRoleData,arrTypeName,arrThs,arrWidth,"100%");
initRight();
}

function window_onload()
{
InitTB();
}


...全文
79 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
nyh800201002 2003-05-24
  • 打赏
  • 举报
回复
net_lover(孟子E章)
快来回答我的问题啊
nyh800201002 2003-05-23
  • 打赏
  • 举报
回复
为什么没人帮我看看这代码呢?我说了必须要用我的代码,因为还有 其它的用途
谢了
nyh800201002 2003-05-23
  • 打赏
  • 举报
回复
to :
net_lover(孟子E章)
你的下拉菜单是如何实现的
他是死的吗,我的菜单要求其二三级实现你的样式,可是菜单由数据庫中取出为动态,我该如何实现呢?

孟子E章 2003-05-23
  • 打赏
  • 举报
回复
n级树、下拉菜单

http://xml.sz.luohuedu.net/
luckweb 2003-05-23
  • 打赏
  • 举报
回复
www.wfjs.com/city/
这里有一个例子
不明白再问
nyh800201002 2003-05-23
  • 打赏
  • 举报
回复
不是这么简单,我必须用这段代码
谢谢各位回答
黑马 2003-05-23
  • 打赏
  • 举报
回复
直接使用jspsmartmenu就可以了!
www.jspsmart.com
nyh800201002 2003-05-23
  • 打赏
  • 举报
回复
是啊,不过还是恳请那位抽空看看,我狠急
xuzuning 2003-05-23
  • 打赏
  • 举报
回复
那么多呀!太。。。
nyh800201002 2003-05-23
  • 打赏
  • 举报
回复
//-------------------------------------------------------------------
// 名称:
// RelateFunc(i,ChkFunc,objchk,strFunc1,strFunc2)
// 功能:
// 关联功能权限
// 参数:
//
// 返回:
// 无
//-------------------------------------------------------------------
function RelateFunc(i,ChkFunc,objchk,strFunc1,strFunc2)
{
if(ChkFunc==strFunc1)
{
if(tbTree.rows(i).cells(1).title==strFunc2)
if(objchk.checked) tbTree.rows(i).cells(1).children(0).checked = true;
}
if(ChkFunc==strFunc2)
{
if(tbTree.rows(i).cells(1).title==strFunc1)
if(!objchk.checked) tbTree.rows(i).cells(1).children(0).checked = false;
}
}

//-------------------------------------------------------------------
// 名称:
// initRight()
// 功能:
// 初始化
// 参数:
// 无
// 返回:
// 无
//-------------------------------------------------------------------
function initRight()
{
for(var iType=0;iType<document.all("imgExpand").length;iType++)
{ var nStart = getStart(iType);
var nEnd = getEnd(iType);
if(nStart<0 || nEnd<0) return;
document.all("imgExpand")[iType].src = "../images/plus.gif";
for(var i=nStart;i<nEnd+1;i++)
{
tbTree.rows(i).style.display = "none";
}
}
}



//-->
</SCRIPT>
nyh800201002 2003-05-23
  • 打赏
  • 举报
回复
//-------------------------------------------------------------------
// 名称:
// chkSel_onclick(iType)
// 功能:
// 用户点击选择一条角色数据的响应涵数
// 参数:
// iType 类型标志,如:0,1,2可以分别代表财务,进销存,CRM等
// 返回:
// 无
//-------------------------------------------------------------------
function chkSel_onclick(iType)
{
var objchk=event.srcElement;
var n = objchk.parentElement.parentElement.rowIndex;
var str1=tbTree.rows(n).cells(1).title;
var nStart = getStart(iType);
var nEnd = getEnd(iType);
var arrNoSingleFunc = new Array("100101","200202","200205","200402","200405","200408","200411","200111","200302","200305","200419");
var arrRelatedFunc = new Array("100102","200201","200204","200401","200404","200407","200410","200103","200301","200304","200418");
for(var i=nStart;i<=nEnd;i++)
{
for(var j=0;j<arrNoSingleFunc.length;j++)
{RelateFunc(i,str1,objchk,arrNoSingleFunc[j],arrRelatedFunc[j]);}
}
for(var i=nStart;i<=nEnd;i++)
{
if(tbTree.rows(i).cells(1).children(0).checked == false)
{
tbTree.rows(nStart-1).cells(1).children(0).checked = false;
return;
}
}

}

//-------------------------------------------------------------------
// 名称:
// getCheckedValue()
// 功能:
// 获取选择的数据
// 参数:
// 无
// 返回:
// 用户选择数据
//-------------------------------------------------------------------
function getCheckedValue()
{
if(tbTree.rows.length == 3)
if(chkSel.checked) return tbTree.rows(2).cells(1).innerText;
if(tbTree.rows.length > 3)
{
var arr = new Array();
for(var i=0;i<chkSel.length;i++)
{
if(chkSel[i].checked)
{
var n = chkSel[i].parentElement.parentElement.rowIndex;
arr[arr.length] = tbTree.rows(n).cells(1).title;
}
}
if(arr.length > 0) return arr.join("#");
}
return "";
}

//-------------------------------------------------------------------
// 名称:
// getCheckedBusValue()
// 功能:
// 获取选择的数据
// 参数:
// 无
// 返回:
// 用户选择数据
//-------------------------------------------------------------------
function getCheckedBusValue()
{
if(tbTree.rows.length == 3)
if(chkSel.checked) return tbTree.rows(2).cells(1).innerText;
if(tbTree.rows.length > 3)
{
var arr = new Array();
for(var i=0;i<chkSel.length;i++)
{
if(chkSel[i].checked)
{
var inti=chkSel[i].title;
if(inti>0 && inti!=6)
{var n = chkSel[i].parentElement.parentElement.rowIndex;
arr[arr.length] = tbTree.rows(n).cells(1).title;
}
}
}
if(arr.length > 0) return arr.join("#");
}
return "";
}
nyh800201002 2003-05-23
  • 打赏
  • 举报
回复
可我还的用我的代码,请大哥分析分析;程序继续;
//-------------------------------------------------------------------
// 名称:
// img_onclick(iType)
// 功能:
// 如果是图片,用户点击扩展,收缩号时的响应函数
// 参数:
// iType 类型标志,如:0,1,2可以分别代表财务,进销存,CRM等
// 返回:
// 无
//-------------------------------------------------------------------
function img_onclick(iType)
{
var nStart = getStart(iType);
var nEnd = getEnd(iType);
if(nStart<0 || nEnd<0) return;
var szShow = "";
var s = String(event.srcElement.src);

s = s.substr(s.length-"minus.gif".length,"minus.gif".length);

if(s == "minus.gif")
{
szShow = "none";
event.srcElement.src = "../images/plus.gif";
}
else
{
event.srcElement.src = "../images/minus.gif";
}

for(var i=nStart;i<nEnd+1;i++)
{
tbTree.rows(i).style.display = szShow;
}
}

//-------------------------------------------------------------------
// 名称:
// chkAllSel_onclick(iType)
// 功能:
// 用户点击选择整个类型的数据的响应涵数
// 参数:
// iType 类型标志,如:0,1,2可以分别代表财务,进销存,CRM等
// 返回:
// 无
//-------------------------------------------------------------------
function chkAllSel_onclick(iType)
{
var nStart = getStart(iType);
var nEnd = getEnd(iType);
if(nStart<0 || nEnd<0) return;
var bChecked = event.srcElement.checked;
for(var i=nStart;i<=nEnd;i++)
{
tbTree.rows(i).cells(1).children(0).checked = bChecked;
}
}
fason 2003-05-23
  • 打赏
  • 举报
回复
无限级:http://fason.nease.net/zhuanti/tree/deeptree_db.rar
nyh800201002 2003-05-23
  • 打赏
  • 举报
回复
//-------------------------------------------------------------------
// 名称:
// getTableHTML(arrRoleData,arrTypeName,arrThs,arrWidth,sTbWidth)
// 功能:
// 根据传入的参数数据,生成整个树状参照的HTML字符串
// 参数:
// arrRoleData 所有的角色数据二维数组
// arrTypeName 类型、名称对应的二维数组,但只有两行,
// 第一行存类型,第二行存名称说明
// arrThs 表头说明文字数组
// arrWidth 各列宽度数组
// sTbWidth 整个表的宽度数组
// 返回:
// 根据传入参数生成的整个表格的HTML字符串
//-------------------------------------------------------------------
function getTableHTML(arrRoleData,arrTypeName,arrThs,arrWidth,sTbWidth)
{
if(arrThs.length != 3) return "";
var sHTML = "<TABLE cellpadding=0 id='tbTree' name='tbTree' cellspacing=0 border=0 width='" + sTbWidth + "'>\n";

sHTML += getTableHeadHTML(arrThs,arrWidth);
var iStart = 2;

for(var i=0;i<10;i++)
{
var arr = getDataFromArray(i,arrRoleData);
if(arr.length>0)
{
var p = m_arrStartEnd.length;
m_arrStartEnd[p] = new Array();
m_arrStartEnd[p][0] = i ;
m_arrStartEnd[p][1] = iStart;
m_arrStartEnd[p][2] = iStart + arr.length - 1 ;
iStart = iStart + arr.length + 1;

sHTML += getFatherHTML(i,arrTypeName,"img");
sHTML += getChildrenHTML(arr,arrWidth);
}
}

sHTML += "</TABLE>";
return sHTML;
}

//-------------------------------------------------------------------
// 名称:
// getStart(iType)
// 功能:
// 根据类型获取指定类型在表格上的数据的起始行号
// 参数:
// iType 类型标志,如:0,1,2可以分别代表财务,进销存,CRM等
// 返回:
// 如果成功,返回起始行号,如果失败返回-1
//-------------------------------------------------------------------
function getStart(iType)
{
for(var i=0;i<m_arrStartEnd.length;i++)
if(m_arrStartEnd[i][0] == iType)
return m_arrStartEnd[i][1];
return -1;
}

//-------------------------------------------------------------------
// 名称:
// getEnd(iType)
// 功能:
// 根据类型获取指定类型在表格上的数据的终止行号
// 参数:
// iType 类型标志,如:0,1,2可以分别代表财务,进销存,CRM等
// 返回:
// 如果成功,返回终止行号,如果失败返回-1
//-------------------------------------------------------------------
function getEnd(iType)
{
for(var i=0;i<m_arrStartEnd.length;i++)
if(m_arrStartEnd[i][0] == iType)
return m_arrStartEnd[i][2];
return -1;
}

//-------------------------------------------------------------------
// 名称:
// lbl_onclick(iType)
// 功能:
// 如果是"+/-"号,用户点击扩展,收缩号时的响应函数
// 参数:
// iType 类型标志,如:0,1,2可以分别代表财务,进销存,CRM等
// 返回:
// 无
//-------------------------------------------------------------------
function lbl_onclick(iType)
{
var nStart = getStart(iType);
var nEnd = getEnd(iType);
if(nStart<0 || nEnd<0) return;
var szShow = "";
if(event.srcElement.innerText == "-")
{
szShow = "none";
event.srcElement.innerText = "+";
}
else
{
event.srcElement.innerText = "-";
}

for(var i=nStart;i<nEnd+1;i++)
{
tbTree.rows(i).style.display = szShow;
}
}
nyh800201002 2003-05-23
  • 打赏
  • 举报
回复
//-------------------------------------------------------------------
// 名称:
// getNameFromType(iType,arrTypeName)
// 功能:
// 根据类型,获取功能说明
// 参数:
// iType 类型标志,如:0,1,2可以分别代表财务,进销存,CRM等
// arrTypeName 类型、名称对应的二维数组,但只有两行,
// 第一行存类型,第二行存名称说明
// 返回:
// 对应的功能说明,如果没有找到,返回空格的超文本实体("nbsp;")。
//-------------------------------------------------------------------
function getNameFromType(iType,arrTypeName)
{
for(var i=0;i<arrTypeName[0].length;i++)
{
if(iType==arrTypeName[0][i])return arrTypeName[1][i];
}
return " ";
}

//-------------------------------------------------------------------
// 名称:
// getChildrenHTML(arr,arrWidth)
// 功能:
// 获取树状参照的孩子的HTML字符串
// 参数:
// arr 孩子数据的二维数组
// arrWidth 每列的宽度数组
// 返回:
// 获取树状参照的孩子的HTML字符串
//-------------------------------------------------------------------
function getChildrenHTML(arr,arrWidth)
{
var sHTML = "";
for(var i=0;i<arr.length;i++)
{
sHTML += "\t<TR bgcolor='white'>\n";
for(var j=0;j<arr[i].length-3;j++)
{
switch(j)
{
case 0:
if(i == arr.length-1)
sHTML += "<TD class='cTdLeft' align='center'><image src='../images/bottom.gif' width='" + arrWidth[0] + "' height='20px'></image></TD>";
else
sHTML += "<TD class='cTdLeft' align='center'><image src='../images/middle.gif' width='" + arrWidth[0] + "' height='20px'></image></TD>";
break;
case 1:
sHTML += "<TD title='" + arr[i][arr[i].length-2] + "'";
sHTML += " class='cTd'><INPUT type='checkbox' id='chkSel' name='chkSel' title='" + arr[i][5] +
"' onclick='chkSel_onclick(" + String(arr[i][0]) + ");' language='javascript' ";
if(arr[i][arr[i].length-3])
sHTML += " checked>" + arr[i][j] + "</TD>";
else
sHTML += ">" + arr[i][j] + "</TD>";
break;
default:
sHTML += "<TD class='cTd'>" + arr[i][j] + "</TD>";
break;
}
}
sHTML += "</TR>";
}
return sHTML;
}

//-------------------------------------------------------------------
// 名称:
// getDataFromArray(iType,arrRoleData)
// 功能:
// 从所有的数据中,获取所有指定类型的数据数组
// 参数:
// iType 类型标志,如:0,1,2可以分别代表财务,进销存,CRM等
// arrRoleData 所有的角色数据二维数组
// 返回:
// 满足指定类型的数据数组
//-------------------------------------------------------------------
function getDataFromArray(iType,arrRoleData)
{
var arr = new Array();
for(var i=0;i<arrRoleData.length;i++)
{
if(arrRoleData[i][0] == iType)
{
var p = arr.length;
arr[p] = new Array();
for(var j=0;j<arrRoleData[i].length;j++)
arr[p][j] = arrRoleData[i][j];
}
}
return arr;
}
nyh800201002 2003-05-23
  • 打赏
  • 举报
回复
//标志每种类型对应的角色的起始终止坐标
var m_arrStartEnd = new Array();

//-------------------------------------------------------------------
// 名称:
// getTableHeadHTML(arrThs,arrWidth)
// 功能:
// 生成参照表格头的HTML
// 参数:
// arrThs 表头提示文字数组
// arrWidth 每列宽度数组
// 返回:
// 生成的参照表格表头HTML
//-------------------------------------------------------------------
function getTableHeadHTML(arrThs,arrWidth)
{
var sHTML = "\t<TR>\n";
for(var i=0;i<arrThs.length;i++)
{
if(i==0)
sHTML += "<TH class='cThLeft' width='" + arrWidth[i] +"'> </TH>";
else
sHTML += "<TH class='cTh' width='" + arrWidth[i] + "'>" + arrThs[i] + "</TH>";
}
sHTML += "\t</TR>\n";
return sHTML;
}

//-------------------------------------------------------------------
// 名称:
// getFatherHTML(iType,arrTypeName,s)
// 功能:
// 生成树状参照的树干的HTML字符串
// 参数:
// iType 类型标志,如:0,1,2可以分别代表财务,进销存,CRM等
// arrTypeName 类型、名称对应的二维数组,但只有两行,
// 第一行存类型,第二行存名称说明
// s 参照折叠按钮采用"+/-"字符串,还是图标(s == "img")
// 返回:
// 生成树状参照的树干的HTML字符串
//-------------------------------------------------------------------
function getFatherHTML(iType,arrTypeName,s)
{
var sHTML = "<TR bgcolor='linen'>\n";
if(s == "img")
sHTML += "<TD class='cTdLeft' align='center'>" +
"<img id='imgExpand' name='imgExpand' onclick='img_onclick(" +
String(iType) + ")'" +
" src='../images/minus.gif' style='cursor:hand'></img></td>";
else
sHTML += "<TD class='cTdLeft' align='center'>" +
"<label id='lblExpand' name='lblExpand' class='cLblExpand' " +
"onclick='lbl_onclick(" + String(iType) +
")'>-</label></TD>";
sHTML += "<TD class='cTd' colspan='2'>" +
"<INPUT type='checkbox' id='chkAllSel' name='chkAllSel' " +
"onclick='chkAllSel_onclick(" + String(iType) +
");' language='javascript''>" +
"</INPUT>" + getNameFromType(iType,arrTypeName) + "</TD>" ;
sHTML += "</TR>\n";
return sHTML;
}
内容概要:本文研究了一种针对四机并联孤岛微电网的协同控制策略,通过集成DoS攻击模拟、布式二次控制、下垂控制与事件触发式负荷控制,旨在实现微电网在遭受网络安全威胁等异常工况下的电压与频率恢复以及有功/无功功率的精确共享配。基于Simulink平台构建了完整的微电网仿真系统,包含多台布式发电单元(DG),采用下垂控制实现无需通信的功率自主配,并引入布式二次控制以补偿由下垂特性引起的电压和频率偏差,从而提升电能质量。为进一步降低通信负担并提高系统效率,设计了事件触发机制,仅在必要时刻进行信息交互。研究重点在于多时间尺度下的协同控制架构设计,全面验证了该策略在正常运行与遭受DoS攻击等扰动情形下的稳定性、鲁棒性与恢复能力。; 适合人群:具备电力系统、自动控制理论基础,熟悉Simulink/Matlab仿真工具,从事微电网、布式能源、智能电网及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究孤岛微电网中电压频率恢复与功率均的多时间尺度协同控制机制;②析DoS网络攻击对微电网控制性能的影响及其应对策略;③掌握事件触发控制在减少通信开销中的实际应用方法;④复现并拓展具备网络安全防护能力的高级微电网控制算法仿真模型。; 阅读建议:此资源以Simulink仿真实现为核心,建议读者结合现代控制理论与网络安全知识,逐步搭建系统模型,重点关注控制器参数整定、事件触发阈值设计及DoS攻击注入方式,通过对比实验深入理解控制策略的有效性与鲁棒性。

87,987

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧