使用asp结合数据库实现不限级数的弹出菜单

菜单|数据|数据库

< !-- #include virtual='Include/database.asp' -->
< %
set rs=Server.CreateObject("ADODB.RecordSet")

sql="SELECT menu_name, menu_link, menu_bgcolor, menu_color,id FROM enter_individual WHERE (parent_id = (SELECT id FROM enter_individual WHERE menu_flag = 'root' )) " '查询得到根节点
rs.Open sql,conn,1,1
Response.Write "< table width=100% border=0 cellspacing=1 cellpadding=0 align=center>< tr bgcolor=#3399CC valign=bottom align=center>"
sumnum=rs.RecordCount
myArray=rs.GetRows()
rs.Close ()
widd=780/sumnum '从一级子菜单数目判断弹出菜单x坐标的递增像素
dim i
i=0
defaultbgcolor="#3399cc" '指定默认底色
defaultcolor="#ffffff" '指定默认字体颜色
defaultlink="#" '指定默认链接
posit_x=0 'x位置
flag=1 '标志,作为菜单弹出方向 1表示向右,0表示向左
'Response.Write myArray(4,6)
while i Response.Write "< td height=20 bgcolor="&myArray(2,i)&" width="&widd&">< a href="&myArray(1,i)&" onmouseover=java script:a"&myArray(4,i)&".style.display='block' onmouseout=java script:a"&myArray(4,i)&".style.display='none' >< font color="&myArray(3,i)&" >"&myArray(0,i)&"< /a>< /td>"
'-----------------------------------------------

i=i+1
Wend
Response.Write "< /tr>< /table>"

i=0
while i posit_y=100 'y位置回到原位

If i>=(sumnum/2) Then '如果菜单进入右半部分,则弹出转向
flag=0
End If

'调用GetSubMenu 函数 设置该项一级菜单的下级菜单,以myArray(4,i) 即菜单id作为下级菜单所在div 的id

GetSubMenu myArray(4,i),posit_x,posit_y
posit_x=posit_x+widd '下一个一级菜单的子菜单的 x坐标值增加一个单位
i=i+1

Wend

'使用递规算法的到下级菜单的函数
'parent_id 父 id; posit_x 弹出层的左边位置; posit_y 弹出层的离上面位置;

Function GetSubMenu(parent_id,posit_x,posit_y)
dim myArray
dim sumnum
dim i

'查询子菜单的下级菜单
sql="SELECT menu_name, menu_link, menu_bgcolor, menu_color,id FROM enter_individual WHERE parent_id = "&parent_id&" AND user_id = '"&userid&"'"
rs.Open sql,conn,1,1

'如果下级菜单不存在,则层数减一 ,关闭数据库链接,建立一个以父id为div id的空层,然后返回
If rs.EOF=true Then
level=level-1
rs.Close ()
'Response.Write parent_id
Response.Write "< div id='a"&parent_id&"' style='position: absolute; top: 4; left: -1; display: none; width: 0; height: 0'>< /div>"
Else

'如果存在取到数据库数据,并调用SetSubMenu显示菜单
sumnum=rs.RecordCount
myArray=rs.GetRows()
rs.Close ()
SetSubMenu myArray,sumnum,parent_id,posit_x,posit_y

'对数据进行循环,递规调用GetSubMenu
i=0
while i< sumnum
posit_y=posit_y*1+20 '递规一次posit_y 加一个单位,
if level=0 Then '如果级数减到0 则回到1
level=1
End If
'If flag=1 Then
'GetSubMenu myArray(4,i),posit_x+level*widd,posit_y-level*20 '递规调用GetSubMenu x,y坐标延伸 level 个单位
'End If
If flag=0 Then
GetSubMenu myArray(4,i),posit_x-level*widd,posit_y-level*20 '递规调用GetSubMenu x,y坐标延伸 level 个单位
Else
GetSubMenu myArray(4,i),posit_x+level*widd,posit_y-level*20 '递规调用GetSubMenu x,y坐标延伸 level 个单位
End If

i=i+1
Wend
End If

End Function

'设置子菜单函数
'myArray 菜单数据 ,sumnum 数组大小 ,parent_id 层的id ;
'posit_x 弹出层的左边位置; posit_y 弹出层的离上面位置;

Function SetSubMenu (myArray,sumnum,parent_id,posit_x,posit_y)
dim i
parent_id="a"&parent_id '父菜单id前面加上a 作为层的id
hh=sumnum*20 '数组大小乘以20作为层的高度
Response.Write "< DIV onmouseover=java script:"&parent_id&".style.display='block' onmouseout=java script:"&parent_id&".style.display='none' ID='"&parent_id&"' STYLE='position: absolute; top:"&posit_y&"; left:"&posit_x&"; height:"&hh*1&"; width: "&widd&"; display:none;vertical-align: top'>< table width=100% border=0 cellspacing=1 cellpadding=0 >"
i=0
While i

myArray(0,i)=Trim(myArray(0,i))
myArray(1,i)=Trim(myArray(1,i))
myArray(2,i)=Trim(myArray(2,i))
myArray(3,i)=Trim(myArray(3,i))

If myArray(2,i)="" Then
myArray(2,i)=defaultbgcolor
End If

If myArray(3,i)="" Then
myArray(3,i)=defaultcolor
End If

If myArray(1,i)="" Then
myArray(1,i)=defaultlink
End If

Response.Wri

时间: 2024-10-31 06:35:11

使用asp结合数据库实现不限级数的弹出菜单的相关文章

asp.net 网页拖选一行文字,弹出一个按钮,将改行文字传回后台

问题描述 asp.net 网页拖选一行文字,弹出一个按钮,将改行文字传回后台 asp.net 网页拖选一行文字,弹出一个按钮,将改行文字传回后台 具体的实现效果就如:再浏览器中,选中文字,出现搜索按钮,然后点击 请问应该怎么做? 解决方案 和asp.net无关,是客户端js做的.document.onmouseup事件判断是否有选中文字,选中弹出按钮,点击按钮用ajax发送文字到后台 <script type="text/javascript" src="http://

C#怎么在textbox7插入数据库前判断已存在并弹出提示框

问题描述 怎么在textbox7插入数据库前判断已存在并弹出提示框,就像下面已经写好的"用户名已存在那样"namespaceInternetShopping.AdminManage{publicpartialclassUserRegister:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){stringnum=("Server=(local);IntegratedSecurity=SSPI;

asp.net实现删除DataGrid的记录时弹出提示信息_实用技巧

本文实例展示了asp.net实现删除DataGrid的记录时弹出提示信息的方法,在进行项目开发的时候非常实用,具体步骤如下: 1.在DataGrid中加一超链接按钮列,文本设为"删除",在aspx页面中加上如下代码: <script language="JavaScript"> function delete_confirm(e){ if(event.srcElement.outerText=="删除"||event.srcElement.name==&

编写ASP.net,我想单击一个按钮就弹出一个目录树,选择一个目录后,将该目录的完全路径显示在一个编辑框中,请问怎样做?

问题描述 编写ASP.net,我想单击一个按钮就弹出一个目录树,选择一个目录后,将该目录的完全路径显示在一个编辑框中,请问怎样做?目录树即为本机的目录急求解答! 解决方案 解决方案二:这个不能得到客户端主机目录但是服务器的主机目录可以同一个页面放入buttontreeviewtextbox控件page_load中设置treeview的visible=false并且绑定目录treeview的selectednodechanged事件下:treeview的visible=truetextbox.te

怎么在textbox7插入数据库前判断已存在并弹出提示框

问题描述 怎么在textbox7插入数据库前判断已存在并弹出提示框,就像下面已经写好的"用户名已存在那样"namespaceInternetShopping.AdminManage{publicpartialclassUserRegister:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){stringnum=("Server=(local);IntegratedSecurity=SSPI;

vs2012-展开刚创建的数据库,右键&amp;amp;quot;表&amp;amp;quot;,弹出菜单中无&amp;amp;quot;添加新表&amp;amp;quot;选项

问题描述 展开刚创建的数据库,右键"表",弹出菜单中无"添加新表"选项 解决方案 问题已解决,这种很明显是数据库安装出了问题,或者是SqlLocalDB或者是SQLEXPR_x64_CHS.总之解决方法如下:找一个用到Express的程序,你运行不通,系统会提示你少了什么东西你装就行了.或者简单一点,再装一次,确保正确安装就行了.时间过去好久了,我也忘了是怎么弄好的了...是我自己逗笔了 解决方案二: 很奇怪,关了重新开下,删除数据库连接,然后重新建立连接. 新建s

asp.net的button如何点击可以弹出个小窗口!

问题描述 我在html中写了个这样的函数<scriptlanguage="javascript">functionLoadFreight(){window.open(url,'','scrollbars=no,top=20,left=20,resizable=no,status=no,toolbar=no,menubar=no,location=no,width=396,height=274');}</script>是不是在button的onclick中调用,为

快速掌握ASP+Access数据库的18条安全法则

ASP+Access数据库的18条安全法则: 1.首先,我们需要过滤所有客户端提交的内容,其中包括?id=N一类,另外还有提交的html代码中的操作数据库的select及asp文件操作语法,大家可以把提交的字符转义,然后再存入数据库. 2.然后需要对访问Access数据库的页面进行授权,针对显示数据页面只能使用select语句,过滤其他的update,asp文件则分为许可访问数据库页面和限制访问页. 3.修改数库据连接文件名conn.asp为类似123ljuvo345l3kj34534v.asp

ASP操作数据库的类,让数据操作变得简单

对于ASP的使用者来说,在数据库操作上越简单,就有更多的时间去考虑逻辑上和应用上的代码,效率也会更高.今天俺在这里给大家提供一种数据库操作的思路,这些代码是俺在长期的ASP应用中不断完成和修正的,也已经用它完成了很多项目了,应该说直接拿去用是没有问题的.当然本人能力也有限,希望大家一起来讨论. 说明:此帖代码均是VBScript版本.另外最好你对手写ASP已经有一定的基础. 先简单介绍一下俺这个类的一些特点: 1.可同时操作多个不同类型的数据库.2.完全不用考虑数据类型的差别,再也不用想字符型字