设为首页
收藏本站
最新电影
> 子栏目 Asp | Jsp | XML | XSL | Div+Css | 自定义函数 | 数据库 | 脚本特效
您现在的位置: 首页=>后台技术=>自定义函数 订阅本栏目  
超级经典二级联动类 支持同一页面多次调用(飞飞修正版)
时间: 2007-09-29 06:50:12 阅读次数:3254


二级联动类
封装得比较好飞飞Asp,技术乐园
支持同一页面多次使用二级联动,可以很容易的改造为N级联动


' -------------------------------------------------------------------------------

' 使用方法:
' 一、创建二级联动类(类名可自行定义)
' Set testMenu=New Link2Menu

' 二、设置类参数:
' 1、parentObjectName ---父菜单名称|文字
' 例:testMenu.parentObjectName = "equfm_id|端口状态"
' 2、parentSQL ---父菜单生成SQL,(字段1为ID号,字段2为名称)
' 例:testMenu.parentSQL = "SELECT equ_id,equ_code FROM iptia_equipment ORDER BY equ_id"
' 3、childObjectName ---子菜单名称|文字
' 例:testMenu.childObjectName = "vlan_id|VLAN"
' 4、childSQL ---子菜单生成SQL,第一字段必须与父菜单SQL的第一字段相同
' 例:testMenu.childSQL = "SELECT equ_id,vlan_id,vlan_code FROM iptia_vlan ORDER BY vlan_id"
' --- 可选参数 ---
' 1、isModify = true | false '是否修改状态,默认为false, 用以跳转到到默认选项
' 例: testMenu.isModify=true
' 2、rsName = [recordSet Name] '记录集名称,默认为"rs",记录集修改时使用
'++++++++++++++++++++++++++++++++++++3、4项为修正信息
' 3、defaultparent 当为修改状态时,父对象的值不是从数据库读取的时候的 可以直接设置 defaultparent
' 4、defaultchild 当为修改状态时,父对象的值不是从数据库读取的时候的 可以直接设置 defaultparent
'++++++++++++++++++++++++++++++++++++
' 三、执行初始化: testMenu.Init()
' 四、WEB页显示:
' 父菜单:testMenu.ShowParentMenu()
' 子菜单:testMenu.ShowChildMenu()
' 备注:为数据修改状态时,需要设置isModify=true
' 五、撤消对象: Set testMenu=Nothing
'-------------------------------------------------------------------------------------
%>
<%
Dim treeCode
Dim link2Menu_FirstRun '是否第一次运行
link2Menu_FirstRun=true
Class Link2Menu
Public strParentMenu,strChildMenu
Public hiddenMenu
Public parentObjectName,childObjectName,parentSQL,childSQL
Public isModify '是否修改状态
Public rsName '记录集名称
Public defaultparent,defaultchild

Public Function Init()
'二级联动菜单
Dim objRS,SQL
Dim parentObject,childObject
Dim parentObjectText,childObjectText
parentObject = split(parentObjectName,"|")(0)
childObject = split(childObjectName,"|")(0)
parentObjectText = split(parentObjectName,"|")(1)
childObjectText = split(childObjectName,"|")(1)
if isModify="" Then isModify=false

hiddenMenu="treeCode_"&parentObject '隐藏表单对象名称,保存联动菜单内容
Set objRS=Server.CreateObject("ADODB.Recordset")
SQL = parentSQL
objRS.Open SQL,Conn,1,1
'---生成父菜单--
strParentMenu="<select name='"&parentObject&"' ChangeLinkMenu(this.options[this.selectedIndex].value,'"&hiddenMenu&"','"&childObject&"','"&parentObject&"')"">"&_
"<option value=""-1"" selected>--- 请选择"&parentObjectText&" ---</option>"
Do While Not objRS.EOF
strParentMenu=strParentMenu&"<option value="""&objRS(0)&""""
If objRS(0) = defaultparent Then strParentMenu=strParentMenu&" selected "
strParentMenu=strParentMenu&" >"&objRS(1)&"</option>"
objRS.MoveNext()
Loop
strParentMenu=strParentMenu&"</select>"
objRS.Close

'---生成子菜单内容---
SQL=childSQL
objRS.Open SQL,conn,1,1
objRS.Cachesize = 5
treeCode = "<input type='hidden' disable='true' name='"&hiddenMenu&"' value='"
Do While Not objRS.EOF
treeCode=treeCode & objRS(0) &","& objRS(1)&","&objRS(2)&";"
objRS.MoveNext()
Loop
treeCode = treeCode & "'>"
Response.Write treeCode
objRS.Close
Set objRS = Nothing

strChildMenu="<select name='"&childObject&"' size='1'>"&_
"<option value='' selected>--- 请选择"&childObjectText&" ---</option>"&_
"</select>"
If link2Menu_FirstRun Then '第一次运行时输出JS
%>
<script language="javascript">
function ChangeLinkMenu(id,dataObject,childObject,parentObject)
{//二级联动-改变子菜单,参数说明:id: 所选父菜单的值
var name,count,j;
var treeCode=new Array();
var dataObject=eval("document.all."+dataObject); //数据对象:源数据所在对象
var childObject=eval("document.all."+childObject); //目标对象
var parentObject=eval("document.all."+parentObject); //父对象
treeCode=dataObject.value.split(";");
count=treeCode.length-1;
j=1;

if (id!=-1 && id!="")
{
childObject.options.length=1;
for (i=0;i<count;i++)
{
treeCodeItem=new Array(3);
treeCodeItem=treeCode.split(",");
nodeType=treeCodeItem[0];
nodeId=treeCodeItem[1];
nodeName=treeCodeItem[2];
if (nodeType==id)
{
childObject.options.length=j+1;
childObject.options[j]=new Option(nodeName,nodeId);
j++;
}
}
childObject.options[j>1?1:0].selected=true;
}
else
{
childObject.options.length=1;
childObject.options[0].selected=true;
}
}
function SelectItem(strValue,ObjName,selMode){
/*函数功能:选中菜单记录
参数说明:
strValue: 数字或字符
值,用于与菜单值匹配,该内容一般来自数据库中,如果菜单为多选,则数值之间用“,”(逗号)分隔,如"24,33,25,23"
ObjName:
菜单名称,可用全名,如:"document.form1.selMenu",也可用缩写,如"selMenu"
selMode:
选择模式,默认0单选,1多选
如用在页面修改中需调用checkform.js
*/
var numargs = arguments.length; //返回的参数数量
var sourceObject; //进行匹配的菜单对象
var isFinded = false; //是否找到匹配内容
var i,j;

if (numargs>1){
if (ObjName.search(/\./g)<0) //对象名称不包含".",则搜索对象
sourceObject=FindObject(ObjName) //FindObject函数在checkform.js中
else
sourceObject=eval(ObjName);
}else{
sourceObject=eval("document.all.selectTree"); //设置缺省对象
}

if ((""+strValue)==""){
sourceObject.options[0].selected=true;
}else{
if (selMode==1){ //多选菜单
var aryID=strValue.split(",");
if (aryID.length==0) return;
for (j=0;j<aryID.length;j++){
for (i=0;i<sourceObject.options.length;i++){
if (sourceObject.options[i].value==aryID[j]){
sourceObject.options[i].selected = true;
isFinded = true;
break;
}
}
}
}else{//单选菜单
var count=sourceObject.options.length;
for (i=0;i<count;i++){
if (sourceObject.options[i].value==(""+strValue)){
sourceObject.options[i].selected = true;
isFinded = true;
break;
}
}
}
if (!isFinded) sourceObject.options[0].selected=true;;
}
return true;
}
</script>
<%
End If
link2Menu_FirstRun=false
End Function
Public Function ShowParentMenu()
Response.Write (strParentMenu)
End Function
Public Function ShowChildMenu()
Response.Write (strChildMenu)
If isModify Then '为修改状态时选中默认
If rsName="" Then rsName=rs
Call Change(rsName)
End If
End Function
Private Function Change(rsName)
'---初始化二级联动菜单,修改数据时使用
If Not IsObject(rsName) Then Exit Function
Dim parentObject,childObject
Dim parentObjectType,childObjectType
Dim rsParentObject,rsChildObject
parentObject = split(parentObjectName,"|")(0)
childObject = split(childObjectName,"|")(0)
'--- 以下代码是为了防止WEB表单名与数据库字段名不匹配 ---
'--- 因为如果使用数据库公共增改模块,表单名称就有前缀("str_" or "int_") ---
parentObjectType = Left(parentObject,4)
childObjectType = Left(childObject,4)
If parentObjectType="str_" or parentObjectType="int_" Then
rsParentObject=Right(parentObject,len(parentObject)-4)
Else
rsParentObject=parentObject
End If
If childObjectType="str_" or childObjectType="int_" Then
rsChildObject=Right(childObject,len(childObject)-4)
Else
rsChildObject=childObject
End If
%>
<script language="javascript">
SelectItem("<%If defaultparent<>"" Then Response.Write(defaultparent) Else Response.Write(rsName(rsParentObject))%>","document.all.<%=parentObject%>"); //选中父对象
parentID=document.all.<%=parentObject%>[document.all.<%=parentObject%>.selectedIndex].value;
ChangeLinkMenu(parentID,'<%=hiddenMenu%>','<%=childObject%>','<%=parentObject%>'); //根据父对象生成子菜单
SelectItem("<%If defaultchild<>"" Then Response.Write(defaultchild) Else Response.Write(rsName(rsChildObject))%>","document.all.<%=childObject%>");//选中子菜单相应项目
</script>
<%
End Function
End Class
%>

[/i][/i][/i][/i]


站内搜索    

下一篇使用ASP中取得图片宽度和高度的类(无组件) 经典

上一篇获取字符串实际占用字节数(如何取特定的长)(len)

本栏目最新 栏目最新列表
解决asp使用xmlhttp生成静态页有延时的方法
Asp按照指定目录使用fso创建文件夹
使用aspjpeg组件给指定图片添加文字水印
使用aspjpeg组件给指定图片添加图片水印
使用aspjpeg组件生成缩略图
网站优化策划 栏目最新列表
增加网站外链的快速方法
网站上线前必做的30个检查
新的友情链接参考标准(没有google的PR情况
优化Google的AdSense广告的五个工具
王通讲SEO八大基础
站点最新 站点最新列表
微博推广的一些技巧
xhEditor v1.1.7 发布,
收集的一些轻量级非常实
50个新鲜兼容最新版本的
javascript中cookie的设
Excel中出现#VALUE!、#D
jquery插件:飞飞表情插件
十个使用HTML5开发的精彩
支持HTML5的浏览器有哪些
飞妮莫属:漫画:如何写出
历史最热10条信息  
MIME介绍 及 [1] [2] [3]
巧用Google和迅雷来下载
Transact SQL 常 [1] [2]
VIA Rhine II Fast Ethe
电脑常用端 [1] [2] [3]
Do you get a kick out
十道羊皮卷 欣赏+mp3版+
每日一句:A friend and
每日一句:Theres no tu
经典__悟透JavaScript
相关文章
获取字符串实际占用
vbscript Asc 函数
过滤特殊字符
生成自定义位随机数
判断数据是否整型
中文字符转Uncode代
可以把动态页生成静
刷新网页的javascri
sql2000的自定义函数
sqlserver过滤字符串
 
 width= 
伟哥博客 西安房产 123最新电影 三四六四