仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 490|回复: 7
打印 上一主题 下一主题

[学习教程] ASP网页设计三阶(三级)联动下拉选单

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:15:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
国内有些大的CRM厂商的ASP就写得不错.无论是概念还是它里面用JAVASCRIPT的能力.并不是说现在的程序员用了ASP.NET来写程序就可以说自己高档了下拉  比来常被的}就是怎样创建B下拉式x(二A),一月之缺了不下十次,其渭要做到B下拉式x(二A)K不困y,可是要和Y料Y合,把Y料的Y料以B下拉式x斫⒕捅仨要加上一c技能了,明天P者也不盘算做二A拥B下拉式x,乾脆间接挑鹑A,再把Y料一同Y合,人人懂得的透一c。

  起首先我看看oB下拉式x(三A)的原始程式,等你看懂了之後咱再使用ASP和SQL懋a生B下拉式x(三A):

  B下拉式x(三A):

  表蚊QmyForm

  第一下拉式x蚊Qcolor

  色:

  t色">t色

  S色">S色

  G色">G色

  第二下拉式x蚊Qfruit

  生果:

  O果

  F

  李子

  第三下拉式x蚊Qprice

  r格:

  10元

  20元

  30元

  定x色下拉式x橐一S列,且列L度槿(暗示有三N色)

  key=newArray(3);

  //定x色下拉式x沃械谝色x橐一S列,且列L度槿(暗示有三N生果),以下依此推

  key[0]=newArray(3);

  key[1]=newArray(2);

  key[2]=newArray(3);

  //@重}定x一列是榱嗽指定生果下拉式x中之生果名Qr已把生果名Q

  //指定o相P的列索引,@些列索引o法被重}定x成列,榱艘r格下拉式x

  //文苎赜弥八x的列值,以是我在此硗庠俣x逐一模一拥年列索引。

  key1=newArray(3);

  key1[0]=newArray(3);

  key1[1]=newArray(2);

  key1[2]=newArray(3);

  //定x生果下拉式x沃械谝生果x橐一S列,且列L度槿(暗示有三N

  //r格),此生果是凫额色下拉式x沃兄谝环N色,以下依此推

  key1[0][0]=newArray(3);

  key1[0][1]=newArray(3);

  key1[0][2]=newArray(3);

  //定x生果下拉式x沃械谝生果x橐一S列,且列L度槿(暗示有三N

  //r格),此生果是凫额色下拉式x沃兄诙N色,以下依此推

  key1[1][0]=newArray(3);

  key1[1][1]=newArray(3);

  //定x生果下拉式x沃械谝生果x橐一S列,且列L度槿(暗示有三N

  //r格),此生果是凫额色下拉式x沃兄谌N色,以下依此推

  key1[2][0]=newArray(3);

  key1[2][1]=newArray(3);

  key1[2][2]=newArray(3);

  //指定生果下拉式x中之生果名Q

  //t色

  key[0][0]="O果";

  key[0][1]="F";

  key[0][2]="李子";

  //S色

  key[1][0]="柳丁";

  key[1][1]="葡萄柚";

  //G色

  key[2][0]="芭";

  key[2][1]="西瓜";

  key[2][2]="子";

  //指定r格下拉式x沃懈生果的r格

  //O果

  key1[0][0][0]="10元"

  key1[0][0][1]="20元"

  key1[0][0][2]="30元"

  //F

  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元"

  //改色下拉式x沃x值r,|Buildkey函,K㈩色下拉式x沃兄x

  //索引值鹘onum,以本例而言,t色0的索引值,S色1的索引

  //值,G色2的索引值

  

  functionBuildkey(num)

  {

  //生果下拉式x沃怂饕付0。

  document.myForm.fruit.selectedIndex=0;

  //由於改生果下拉式xr,r格下拉式x我脖仨跟著,以是我在此便呼

  //叫Buildkey1函,K迫r格下拉式x沃兄x索引值0,暗示不论今朝是何N

  //色的生果,r格下拉式x味尸F此生果的第一Nr格

  

  Buildkey1(0);

  //@是最PI的步E,在JavaScript中,for(ctr=0;ctr//就等於VBScript中的Forctr=0tokey[num].length,如有不懂的中央建h年夜

  //家I一本JavaScript的砜,e例碚f明底下的程式人人容^分明,我

  //x了t色之後,此rnum=0(后面已f^了),此rkey[0]的列L度我能够透^

  //先前定x得知,key[0].length=3,而生果下拉式x㈤_始改,生果下拉式x沃

  //第一x⒆成key[0][0],也就是O果,生果下拉式x沃械诙x⒆成key

  //[0][1],也就是F,生果下拉式x沃械谌x⒆成key[0][2],也就是李子,@

  //人人懂得了吧!!

  

  for(ctr=0;ctrkey[0].length指定槟壳八吕竭x沃饕列L度。

  document.myForm.fruit.length=key[num].length;

  }

  functionBuildkey1(num)

  {

  //r格下拉式x沃怂饕付0。

  document.myForm.price.selectedIndex=0;

  //改r格下拉式x蔚倪x除跟生果下拉式x蜗嚓P以外,跟今朝所x色有P

  //例碚f明底下的程式人人容^分明,我x了t色之後,此r

  //document.myForm.color.selectedIndex=0(因榧t色是色下拉式x沃兄

  //一指怂饕),假如我在生果下拉式x沃羞x的生果是F,此rnum=1,而

  //key1[document.myForm.color.selectedIndex][num].length此r成key1

  //[0][1].length,之前的定x能够晓得@值是3,而r格下拉式x㈤_始改,r格//下拉式x沃第一x⒆成key[0][1][0],也就是40元,r格下拉式x沃械诙

  //x⒆成key[0][1][1],也就是50元,生果下拉式x沃械谌x⒆成key

  //[0][1][2],也就是60元,@人人懂得了吧!!

  for(ctr=0;ctr由色下拉式x嗡饕〉盟列值;

  document.myForm.cost.options[ctr]=newOption(key1[document.myForm.color.selectedIndex][num][ctr],key1[document.myForm.color.selectedIndex][num][ctr]);

  }

  }

  //-->

  下面的程式但愿人人用值M往的体例W,我想容^好W,如有任何看不懂的中央能够间接留言告V我,接下砦_始使用ASPcSQLBa生下面那段程式,但愿人人不要因樯厦娴某淌娇床惶丝s,因榈紫碌某淌⒏檠}s,假如人人能⒄流程吸取,我信任不论是B下拉式x(四A)或B下拉式x(五A)都㈦y不倒你了,之以是蒙厦娴姆绞B创建下拉式x问且楣P者X得@例m然比^麻,可是s是比^简单了解的,别的煞N体例P者X得大概出碇缓媒忉以是作T!!

在M进作之前,先我创建三Y料表,一是colorY料表,一是fruitY料表,一是priceY料表,Y料表架以下:


三Y料表热莘e以下所示:
      人人能够看的到fruitY料表是以COLORID谖慌ccolorY料表构成P,而priceY料表又以FRUITID谖慌cfruitY料表构成P,我想要Y料是以上面的体例沓尸F怎样做呢?
t色→O果→10元
t色→O果→20元
t色→O果→30元
t色→F→40元
t色→F→50元
t色→F→60元
t色→李子→70元
t色→李子→80元
t色→李子→90元
S色→柳丁→100元
S色→柳丁→110元
S色→柳丁→120元
S色→葡萄柚→130元
S色→葡萄柚→140元
S色→葡萄柚→150元
G色→芭贰160元
G色→芭贰170元
G色→芭贰180元
G色→西瓜→190元
G色→西瓜→200元
G色→西瓜→210元
G色→子→220元
G色→子→230元
G色→子→240元
  我用JOIN的体例⑷Y料表P起,JOIN的t是把fruitY料表中COLORID谖恢档褥colorY料表中ID谖坏馁Y料且priceY料表中FRUITID谖恢档褥fruitY料表中ID谖坏馁Y料JOIN起怼
<%
myDSN="Provider=SQLOLEDB;DataSource=Jackal;InitialCatalog=pubs;UserID=sa;Password="

strSQL="selectcolor.color,fruit.fruit,price.costfromcolorjoinfruitoncolor.ID=fruit.COLORIDjoinpriceonprice.FRUITID=fruit.IDorderbycolor.ID"

Setmy_conn=Server.CreateObject("ADODB.Connection")
my_conn.openmyDSN
setrs=my_conn.execute(strSQL)
DOUNTILrs.eof
Response.Writers(0)&"→"&rs(1)&"→"&rs(2)&"<br>"
rs.movenext

LOOP

rs.close
setrs=nothing
my_conn.close
setmy_conn=nothing

%>



  就下面的Y料架而言我能够很分明了看到,t色→O果→10元相於是key1[0][0][0]@列索引的值,而G色→子→240元就相於是key1[2][2][2]@列索引的值,而t色→O果也相於是key[0][0]@列索引的值,注重一是key,一是key1,也就是我在文章一_始告V你楹我x列值的缘故原由,OK,看了Y料的架之後最麻┑氖虑砹,要怎样把@拥馁Y料架D成列,并且要和Y料作Y合呢?底下@一段程式大概有c}s,不^我M量解分明:

  DynamicSelectBox.asp

  


  ByRef。间接^看底下副程式的部分

  myDSN="Provider=SQLOLEDB;DataSource=Jackal;InitialCatalog=pubs;UserID=sa;Password="

  strSQL="selectcolor.color,fruit.fruit,price.costfromcolorjoinfruitoncolor.ID=fruit.COLORIDjoinpriceonprice.FRUITID=fruit.IDorderbycolor.ID"

  calllistmaker(myDSN,strSQL,colorlist,"color",fruitlist,"fruit",pricelist,"price",pubevent,pubfun,"myForm")

  %>

  色:

  生果:

  r格:

  -->

  "

  使用fruitlist字串斫⒌诙下拉式x蔚Html原始a。

  fruitlist=""

  使用pricelist字串斫⒌谌下拉式x蔚Html原始a。

  pricelist=""

  在@e初始某些抵,作底下绦羞算r之旗酥怠

  loopcounter=0

  lastvalue=rs(0)

  lastvalue2=rs(1)

  redimtempArray(1)

  thisgroupcount代表某N色共有N生果

  thisgroupcount=0

  thissubgroupcount代表某N生果共有Nr格,生果Qrthissubgroupcountw零,K从头

  累加。

  thissubgroupcount=0

  howmanygroups代表共有N色

  howmanygroups=0

  howmanysubgroups代表共有N生果,色Qrhowmanysubgroupsw零,K从头

  累加。

  howmanysubgroups=0

  DOUNTILrs.eof

  thisvalue=rs(0)

  thisvalue2=rs(1)

  thisvalue3=rs(2)

  

  假如lF生果名Q改,并且今朝生果是某N色的第一N生果r,比如:t色→O果

  或:S色→柳丁r就在Script中加上色擞(榱俗人人更简单Script^隔_

  ),然後再⑺Q定x到key列值,

  接著再定xkey1[第N色][第N生果]之列L度。

  

  ifthisvalue2lastvalue2then

  Ifhowmanysubgroups=0then

  tempSTR1=tempSTR1&"//"&lastvalue&vbcrlf

  tempSTR2=tempSTR2&"//"&lastvalue&vbcrlf

  endIf

  tempSTR2=tempSTR2&"key1["&howmanygroups&"]["&howmanysubgroups&

  "]=newArray("&thissubgroupcount&");"&vbcrlf

  tempSTR1=tempSTR1&"key["&howmanygroups&"]["&howmanysubgroups&

  "]="""&lastvalue2&""";"&vbCRLF

  howmanysubgroups=howmanysubgroups+1

  thissubgroupcount=0

  lastvalue2=thisvalue2

  endif

  绦薪Y果以下

  //t色

  key[0][0]="O果";

  key[0][1]="F";

  key[0][2]="李子";

  //S色

  key[1][0]="柳丁";

  key[1][1]="葡萄柚";

  //G色

  key[2][0]="芭";

  key[2][1]="西瓜";

  key[2][2]="子";

  //t色

  key1[0][0]=newArray(3);

  key1[0][1]=newArray(3);

  key1[0][2]=newArray(3);

  //S色

  key1[1][0]=newArray(3);

  key1[1][1]=newArray(3);

  //G色

  key1[2][0]=newArray(3);

  key1[2][1]=newArray(3);

  key1[2][2]=newArray(3);

  假如lF色名Q改,就定xkey[第N色]列值,

  接著再定xkey1[第N色]之列L度,重}定x的缘故原由在之前已跟人人f^了,然

  後howmanygroups(色N)值加一,K⑺N抵(thisgroupcount)w零

  ifthisvaluelastvaluethen

  tempSTR=tempSTR&"key["&howmanygroups&"]=newArray("&howmanysubgroups&");"&_

  vbcrlf

  tempSTR=tempSTR&"key1["&howmanygroups&"]=newArray("&howmanysubgroups&");"&_

  vbcrlf

  thisgroupcount=0

  howmanygroups=howmanygroups+1

  howmanysubgroups=0

  endif

  绦薪Y果以下

  key=newArray(3);

  key1=newArray(3);

  key[0]=newArray(3);

  key1[0]=newArray(3);

  key[1]=newArray(2);

  key1[1]=newArray(2);

  key[2]=newArray(3);

  key1[2]=newArray(3)

  假如thisgroupcount=0代表今朝色改,此r㈩色名Q到color下拉式x沃

  ifthisgroupcount=0then

  colorlist=colorlist&""&thisvalue&""&vbcrlf

  endif

  假如thissubgroupcount=0代表今朝生果改,此r在key1[第N色][第N生果][第

  Nr格]列值前加下水果名Q擞,人人更简单⑺Qcr格^隔_怼

  ifthissubgroupcount=0then

  tempSTR3=tempSTR3&"//"&lastvalue2&vbcrlf

  endif

  定xkey1[第N色][第N生果][第Nr格]列值。

  tempSTR3=TempSTR3&"key1["&howmanygroups&"]["&howmanysubgroups&"]["&thissubgroupcount&"]="""&thisvalue3&""";"&vbCRLF

  绦薪Y果:

  //l果

  key1[0][0][0]="10元";

  key1[0][0][1]="20元";

  key1[0][0][2]="30元";

  //F

  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元";

  假如今朝是第一N色,并且生果名Q正在改,就生果名Q到fruit下拉式x沃

  ifhowmanygroups=0then

  Ifthissubgroupcount=0then

  fruitlist=fruitlist&""&thisvalue2&""&vbcrlf

  endif

  EndIf

  假如今朝是第一N色,并且是第一N生果,就r格到price下拉式x巍

  ifhowmanygroups=0then

  ifhowmanysubgroups=0then

  pricelist=pricelist&""&thisvalue3&""&vbcrlf

  endif

  Endif

  thisgroupcount=thisgroupcount+1

  thissubgroupcount=thissubgroupcount+1

  lastvalue=thisvalue

  loopcounter=loopcounter+1

  rs.movenext

  LOOP

  e忘了最後一key[第N色]和key1[第N色]的列L度不决x。

  tempSTR=tempSTR&"key["&howmanygroups&_

  "]=newArray("&howmanysubgroups+1&");"&_

  vbcrlf

  tempSTR=tempSTR&"key1["&howmanygroups&_

  "]=newArray("&howmanysubgroups+1&");"&_

  vbcrlf

  e忘了最後一key[第N色][第N生果]和key1[第N色][第N生果]的列L

  度不决x。

  tempSTR2=TempSTR2&"key1["&howmanygroups&"]["&howmanysubgroups&"]=newArray("&thissubgroupcount&");"&_

  vbcrlf

  tempSTR1=TempSTR1&"key["&howmanygroups&"]["&howmanysubgroups&"]="""&lastvalue2&""";"&vbCRLF

  tempSTR=tempSTR&TempSTR1&TempSTR2&tempSTR3

  color下拉式x巫饕Y尾

  colorlist=colorlist&""

  fruit下拉式x巫饕Y尾

  fruitlist=fruitlist&""

  price下拉式x巫饕Y尾

  pricelist=pricelist&""

  一_始的key和key1列也不要忘定x了。

  

  myevent=vbcrlf&"key=newArray("&howmanygroups+1&");"

  myevent=myevent&vbcrlf&"key1=newArray("&howmanygroups+1

  myevent=myevent&");"&vbcrlf&tempSTR

  半途而废,能够P]Y料了。

  rs.close

  setrs=nothing

  my_conn.close

  setmy_conn=nothing

  先a生Buildkey副程式,@一c都不困y,道理在下面已解^了,P者不再述,绦薪Y果:

  functionBuildkey(num)

  {

  Buildkey1(0);

  document.myForm.fruit.selectedIndex=0;

  for(ctr=0;ctr

  tempSTR=vbcrlf&"functionBuildkey"&"(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

  再人人看看最後的Y果:

  色:

  t色

  S色

  G色

  生果:

  l果

  F

  李子

  r格:

  10元

  20元

  30元

  送出">

  t色

  key[0][0]="O果";

  key[0][1]="F";

  key[0][2]="李子";

  //S色

  key[1][0]="柳丁";

  key[1][1]="葡萄柚";

  //G色

  key[2][0]="芭";

  key[2][1]="西瓜";

  key[2][2]="子";

  //t色

  key1[0][0]=newArray(3);

  key1[0][1]=newArray(3);

  key1[0][2]=newArray(3);

  //S色

  key1[1][0]=newArray(3);

  key1[1][1]=newArray(3);

  //G色

  key1[2][0]=newArray(3);

  key1[2][1]=newArray(3);

  key1[2][2]=newArray(3);

  //l果

  key1[0][0][0]="10元";

  key1[0][0][1]="20元";

  key1[0][0][2]="30元";

  //F

  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元";

  functionBuildkey(num)

  {

  Buildkey1(0);

  document.myForm.fruit.selectedIndex=0;

  for(ctr=0;ctr

其@程式fy不y,重c是在列索引的^念,同拥挠}能够在^间接提出,但愿人人看了@篇文章之後,不要再我B下拉式x(二A)怎样做了!!祝人人身w安康,Coding快贰
asp,你就只能等着微软给你解决,它不乐意你就只好悲催。而且asp跑在windows服务器上,windows服务器跟linux比起来简直弱爆了!
分手快乐 该用户已被删除
沙发
发表于 2015-1-19 06:02:04 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
蒙在股里 该用户已被删除
板凳
发表于 2015-2-3 12:40:03 | 只看该作者
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
活着的死人 该用户已被删除
地板
发表于 2015-2-9 01:37:11 | 只看该作者
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
只想知道 该用户已被删除
5#
发表于 2015-2-26 17:12:40 | 只看该作者
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
冷月葬花魂 该用户已被删除
6#
发表于 2015-3-8 16:23:29 | 只看该作者
运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-16 05:21:37 | 只看该作者
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
老尸 该用户已被删除
8#
发表于 2015-3-22 20:13:43 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 03:57

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表