您的位置:首页 → 网页设计 → ASP实例 → 建立动态下拉式选单三阶层
建立动态下拉式选单三阶层
时间:2004/11/7 2:57:00 来源:本站整理 作者:蓝点 我要评论 (0)
'建立動態下拉式選單 (三階層) <%'将资料库连结字串, SQL 叙述,形成第一个表单字串变数 (colorlist),第一个表单名称 'color,形成第二个表单字串变数 (fruitlist),第二一个表单名称 fruit,形成第三个表单字串变数 '(pricelist),第三个表单名称 price,等资讯透过呼叫副程式的方式经过处理之后再传回主程式'中,请注意有某几个参数是以 ByRef 的方式传回主程式,而某些参数是以 ByVal 的方式传回'的紫色粗体字代表是 ByRef。请直接观看底下副程式的部分 myDSN="Provider=SQLOLEDB; Data Source=Jackal; Initial Catalog=pubs; User ID=sa; Password=" strSQL="select color.color, fruit.fruit, price.cost from color join fruit on color.ID=fruit.COLORID join price on price.FRUITID=fruit.ID order by color.ID" call listmaker(myDSN, strSQL, colorlist,"color", fruitlist ,"fruit", pricelist, "price", pubevent, pubfun, "myForm")%> <% SUB listmaker(myDSN, strSQL,byref list1, listname1, byref list2, listname2, byref list3, listname3, byref myevent, byref myfun, myForm) Set my_conn = Server.CreateObject("ADODB.Connection") my_conn.open myDSN set rs=my_conn.execute(strSQL) '利用 colorlist 字串变数来建立第一个下拉式选单的 Html 原始码。 colorlist=" colorlist=colorlist & "(this.selectedIndex);"">" '利用 fruitlist 字串变数来建立第二个下拉式选单的 Html 原始码。 fruitlist=" fruitlist=fruitlist & "(this.selectedIndex);"">" '利用 pricelist 字串变数来建立第三个下拉式选单的 Html 原始码。 pricelist="" '在这里初始某些变数值,当作底下执行运算时之旗标值。 loopcounter=0 lastvalue=rs(0) lastvalue2=rs(1) redim tempArray(1) 'thisgroupcount 代表某种颜色共有几种水果 thisgroupcount=0 'thissubgroupcount 代表某种水果共有几种价格,当水果变换时 thissubgroupcount 会归零,并重新'累加。 thissubgroupcount=0 'howmanygroups 代表共有几种颜色 howmanygroups=0 'howmanysubgroups 代表共有几种水果,当颜色变换时 howmanysubgroups 会归零,并重新'累加。 howmanysubgroups=0 DO UNTIL rs.eof thisvalue=rs(0) thisvalue2=rs(1) thisvalue3=rs(2) '如果发现水果名称改变,而且目前水果是某种颜色的第一种水果时,譬如:红色←苹果 '或:黄色←柳丁时就在 Script 中加上颜色标记 (为了让大家更容易将 Script 区隔开'来),然后再将水果名称定义到 key 阵列值, '接着再定义 key1[第几种颜色][第几种水果] 之阵列长度。 if thisvalue2<>lastvalue2 then If howmanysubgroups=0 then tempSTR1=tempSTR1 & "// " & lastvalue & vbcrlf tempSTR2=tempSTR2 & "// " & lastvalue & vbcrlf end If tempSTR2=tempSTR2 & "key1[" & howmanygroups & "][" & howmanysubgroups & "]=new Array(" & thissubgroupcount & ");" & vbcrlf tempSTR1=tempSTR1 & "key[" & howmanygroups & "][" & howmanysubgroups & "]=""" & lastvalue2 & """;" & vbCRLF howmanysubgroups=howmanysubgroups+1 thissubgroupcount=0 lastvalue2=thisvalue2 end if '执行结果如下 // 红色 key[0][0]="苹果"; key[0][1]="莲雾"; key[0][2]="李子"; // 黄色 key[1][0]="柳丁"; key[1][1]="葡萄柚"; // 绿色 key[2][0]="芭乐"; key[2][1]="西瓜"; key[2][2]="枣子"; // 红色 key1[0][0]=new Array(3); key1[0][1]=new Array(3); key1[0][2]=new Array(3); // 黄色 key1[1][0]=new Array(3); key1[1][1]=new Array(3); // 绿色 key1[2][0]=new Array(3); key1[2][1]=new Array(3); key1[2][2]=new Array(3); '如果发现颜色名称改变,就定义 key[第几种颜色] 阵列值, '接着再定义 key1[第几种颜色] 之阵列长度,重复定义的原因在之前已跟大家说过了,然'后将howmanygroups (颜色种类) 值加一,并将水果种类计数值 (thisgroupcount) 归零if thisvalue<>lastvalue then tempSTR=tempSTR & "key[" & howmanygroups & "]=new Array(" & howmanysubgroups & ");" & _vbcrlf tempSTR=tempSTR & "key1[" & howmanygroups & "]=new Array(" & howmanysubgroups & ");" & _vbcrlf thisgroupcount=0 howmanygroups=howmanygroups+1 howmanysubgroups=0 end if '执行结果如下 key=new Array(3); key1=new Array(3); key[0]=new Array(3); key1[0]=new Array(3); key[1]=new Array(2); key1[1]=new Array(2); key[2]=new Array(3); key1[2]=new Array(3) '如果 thisgroupcount=0 代表目前颜色改变,此时将颜色名称写到 color 下拉式选单中if thisgroupcount=0 then colorlist =colorlist & "" & thisvalue & " " & vbcrlf end if '如果 thissubgroupcount=0 代表目前水果改变,此时在key1[第几种颜色][第几种水果][第几'种价格] 阵列值前加上水果名称标记,让大家更容易将水果名称与价格区隔开来。 if thissubgroupcount=0 then tempSTR3=tempSTR3 & "// " & lastvalue2 & vbcrlf end if '定义key1[第几种颜色][第几种水果][第几种价格] 阵列值。 tempSTR3=TempSTR3 & "key1[" & howmanygroups & "][" & howmanysubgroups & "][" & thissubgroupcount & "]=""" & thisvalue3 & """;" & vbCRLF '执行结果: // 频果 key1[0][0][0]="10元"; key1[0][0][1]="20元"; key1[0][0][2]="30元"; // 莲雾 key1[0][1][0]="40元"; key1[0][1][1]="50元"; key1[0][1][2]="60元"; // 李子 key1[0][2][0]="70元"; key1[0][2][1]="80元"; key1[0][2][2]="90元"; // 柳丁 key1[1][0][0]="100元"; key1[1][0][1]="110元"; key1[1][0][2]="120元"; // 葡萄柚 key1[1][1][0]="130元"; key1[1][1][1]="140元"; key1[1][1][2]="150元"; // 芭乐 key1[2][0][0]="160元"; key1[2][0][1]="170元"; key1[2][0][2]="180元"; // 西瓜 key1[2][1][0]="190元"; key1[2][1][1]="200元"; key1[2][1][2]="210元"; // 枣子 key1[2][2][0]="220元"; key1[2][2][1]="230元"; key1[2][2][2]="240元"; '如果目前是第一种颜色,而且水果名称正在改变,就将水果名称写到 fruit 下拉式选单中 if howmanygroups=0 then If thissubgroupcount=0 then fruitlist = fruitlist & "" & thisvalue2 & " " & vbcrlf end if End If '如果目前是第一种颜色,而且是第一种水果,就将价格写到 price 下拉式选单。 if howmanygroups=0 then if howmanysubgroups=0 then pricelist = pricelist & "" & thisvalue3 & " " & vbcrlf end if End if thisgroupcount=thisgroupcount+1 thissubgroupcount=thissubgroupcount+1 lastvalue=thisvalue loopcounter=loopcounter+1 rs.movenext LOOP '别忘了最后一个 key[第几种颜色] 和 key1[第几种颜色] 的阵列长度还未定义。 tempSTR=tempSTR & "key[" & howmanygroups & _ "]=new Array(" & howmanysubgroups+1 & ");" & _ vbcrlf tempSTR=tempSTR & "key1[" & howmanygroups & _ "]=new Array(" & howmanysubgroups+1 & ");" & _ vbcrlf '别忘了最后一个 key[第几种颜色][第几种水果] 和 key1[第几种颜色][第几种水果] 的阵列长'度还未定义。 tempSTR2=TempSTR2 &"key1[" & howmanygroups & "][" & howmanysubgroups & "]=new Array(" & thissubgroupcount & ");" & _vbcrlf tempSTR1= TempSTR1 & "key[" & howmanygroups & "][" & howmanysubgroups & "]=""" & lastvalue2 & """;" & vbCRLF tempSTR=tempSTR & TempSTR1 & TempSTR2 & tempSTR3 '将 color 下拉式选单作一个结尾 colorlist=colorlist & " " '将 fruit 下拉式选单作一个结尾 fruitlist= fruitlist & " " '将 price 下拉式选单作一个结尾 pricelist= pricelist & " " '一开始的 key 和 key1 阵列也不要忘记定义了。 myevent=vbcrlf & "key=new Array(" & howmanygroups+1 & ");" myevent=myevent & vbcrlf & "key1=new Array(" & howmanygroups+1 myevent=myevent & ");" & vbcrlf & tempSTR '大功告成,可以关闭资料库了。 rs.close set rs=nothing my_conn.close set my_conn=nothing '先产生 Buildkey 副程式,这边一点都不困难,原理在上面已经解释过了,笔者不再赘述,执行结果为: function Buildkey(num) { Buildkey1(0); document.myForm.fruit.selectedIndex=0; for(ctr=0;ctr { document.myForm.fruit.options[ctr]=new Option(key[num][ctr],key[num][ctr]); } document.myForm.fruit.length=key[num].length; } tempSTR =vbcrlf & "function Buildkey" & "(num)" & vbcrlf tempSTR =tempSTR & "{" & vbcrlf tempSTR =tempSTR & "Buildkey1(0);" & vbcrlf tempSTR =tempSTR & "document." & myForm & "." tempSTR =tempSTR & listname2 & ".selectedIndex=0;" & vbcrlf tempSTR =tempSTR & "for(ctr=0;ctr tempSTR =tempSTR & "{" & vbcrlf tempSTR =tempSTR & "document." & myform & "." & listname2 tempSTR =tempSTR & ".options[ctr]=new Option(key[num][ctr]," tempSTR =tempSTR & "key[num][ctr]);" & vbcrlf tempSTR =tempSTR & "}" & vbcrlf tempSTR =tempSTR & "document." & myForm & "." & listname2 tempSTR =tempSTR & ".length=key[num].length;" & vbcrlf tempSTR =tempSTR & "}" & vbcrlf '再产生 Buildkey1 副程式 function Buildkey1(num) { document.myForm.price.selectedIndex=0; for(ctr=0;ctr document.myForm.price.options[ctr]=new Option(key1[document.myForm.color.selectedIndex][num][ctr],key1[document.myForm.color.selectedIndex][num][ctr]); } document.myForm.price.length=key1[document.myForm.color.selectedIndex][num].length; } tempSTR =tempSTR & vbcrlf & "function Buildkey1" & "(num)" & vbcrlf tempSTR =tempSTR & "{" & vbcrlf tempSTR =tempSTR & "document." & myForm & "." tempSTR =tempSTR & listname3 & ".selectedIndex=0;" & vbcrlf tempSTR =tempSTR & "for(ctr=0;ctr tempSTR =tempSTR & "document." & myform & "." & listname3 tempSTR =tempSTR & ".options[ctr]=new Option(key1[document.myForm.color.selectedIndex][num][ctr]," tempSTR =tempSTR & "key1[document.myForm.color.selectedIndex][num][ctr]);" & vbcrlftempSTR =tempSTR & "}" & vbcrlf tempSTR =tempSTR & "document." & myForm & "." & listname3 tempSTR =tempSTR & ".length=key1[document.myForm.color.selectedIndex][num].length;" & vbcrlftempSTR =tempSTR & "}" & vbcrlf myfun=tempSTR END sub %>
相关阅读
Windows错误代码大全 Windows错误代码查询 激活windows有什么用 Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录 Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新 windows 10 rs4快速预览版17017下载错误问题 Win10秋季创意者更新16291更新了什么 win10 16291更新内容 windows10秋季创意者更新时间 windows10秋季创意者更新内容 kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章
没有查询到任何记录。
最新文章
迅雷新手完全入门手册
asp下面javascript上传图片限制格式大小方法 告诉大家网页弹出窗口应用总结 ASP常见错误类型大全 asp常见错误分析和解决办法
人气排行
总是弹出visual studio 实时调试器 三种解决 SQLSERVER存储过程及调用详解 Asp获取真实IP地址 ASP中连接Mssql的几种方法 一个简单好用的UBB编辑器(含代码) 如何用Split将字符串转换为数组并获取数组下 ASP防止表单重复提交的办法 告诉你免费的简单聊天室源代码
查看所有0条评论>>