注册 登录
编程论坛 ASP技术论坛

关于二级联动菜单!

szp2006 发布于 2008-10-16 10:37, 1797 次点击
请教各位:
我想要在程序中用判断语句来控制二级联动菜单中的第一个菜单中的内容,应该怎么实现?
急急急
15 回复
#2
nicechlk2008-10-16 11:06
二级菜单联动好复杂呀,我也是在网上找到的代码,一大堆!
基本上都是js和VB混合编程才能实现的。
#3
szp20062008-10-16 11:11
我想用下面这段代码实现,但是运行后,菜单里什么也没有,麻烦各位帮忙看看,什么地方有错误?
 <%xiangzhen=session("xiangzhen") %>
 <form id="form1" name="form1" method="post" action="nainiushuliang_add_save.asp">
  <SCRIPT   LANGUAGE="JavaScript">  
function   Dsy()   
  {   
  this.Items   =   {};   
  }   
  Dsy.prototype.add   =   function(id,iArray)   
  {   
  this.Items[id]   =   iArray;   
  }   
  Dsy.prototype.Exists   =   function(id)   
  {   
  if(typeof(this.Items[id])   ==   "undefined")   return   false;   
  return   true;   
  }   
   
  function   change(v){   
  var   str="0";   
  for(i=0;i<v;i++){   str+=("_"+(document.getElementById(s[i]).selectedIndex-1));};   
  var   ss=document.getElementById(s[v]);   
  with(ss){   
  length   =   0;   
  options[0]=new   Option(opt0[v],opt0[v]);   
  if(v   &&   document.getElementById(s[v-1]).selectedIndex>0   ||   !v)   
  {   
  if(dsy.Exists(str)){   
  ar   =   dsy.Items[str];   
  for(i=0;i<ar.length;i++)options[length]=new   Option(ar[i],ar[i]);   
  if(v)options[1].selected   =   true;   
  }   
  }   
  if(++v<s.length){change(v);}   
  }   
  }   
   
  var   dsy   =   new   Dsy();
  a="安徽",b="北京",c="福建",d="甘肃";
  a1="安庆",a2="蚌埠"
  b1="北京"
 if (a==xiangzhen)
   {b="";c="";d="";
   }
   
  dsy.add("0",["a","b","c","d"]);   
   
  dsy.add("0_0",["a1","a2",]);   
 
  dsy.add("0_1",["b1"]);   
  
     
   
  //-->   
  </SCRIPT>   
  <SCRIPT   LANGUAGE   =   JavaScript>   
  <!--   
  //**   Power   by   Fason(2004-3-11)   
  //**   Email:fason_pfx@   
   
  var   s=["s1","s2","s3"];   
  var   opt0   =   [" "," "];   
  function   setup()   
  {   
  for(i=0;i<s.length-1;i++)   
  document.getElementById(s[i]).onchange=new   Function("change("+(i+1)+")");   
  change(0);   
  }
#4
liu_libra2008-10-16 12:45
是不是要在<body>中加上onload才行
#5
szp20062008-10-16 13:20
楼上能告诉我怎么加吗?非常着急!!
#6
multiple19022008-10-16 13:34
引用一张帖子
https://bbs.bccn.net/viewthread.php?tid=225295&extra=page%3D1%26amp%3Bfilter%3Ddigest
关于ASP中脚本执行顺序的最最最健全的讲解(要问相关问题的必读贴)请看完所有回复
#7
szp20062008-10-16 14:48
楼上可以告诉我怎么改一下我的程序吗?
因为我做的这个比较急,可能没有时间一点一点的再去学习了,拜托了!!
#8
yms1232008-10-16 15:11
<%xiangzhen=session("xiangzhen") %>
<form id="form1" name="form1" method="post" action="nainiushuliang_add_save.asp">
<SCRIPT   LANGUAGE="JavaScript">  
function Dsy()   
{   
  this.Items={};   
}   
Dsy.prototype.add=function(id,iArray)   
{   
  this.Items[id]=iArray;   
}   
Dsy.prototype.Exists=function(id)   
{   
  if(typeof(this.Items[id])=="undefined")   
     return false;   
  return true;   
}   
function change(v)
{   
  var str="0";   
  for(i=0;i<v;i++)
  {   
      str+=("_"+(document.getElementById(s[i]).selectedIndex-1));
  }   
  var ss=document.getElementById(s[v]);   
  with(ss)
  {   
     length=0;   
     options[0]=new   Option(opt0[v],opt0[v]);   
     if(v&&document.getElementById(s[v-1]).selectedIndex>0||!v)   
     {   
        if(dsy.Exists(str))
        {   
           ar=dsy.Items[str];   
           for(i=0;i<ar.length;i++)
               options[length]=new Option(ar[i],ar[i]);   
           if(v)
               options[1].selected=true;   
        }   
     }   
     if(++v<s.length)
     {
        change(v);
     }   
   }   
}   
var dsy=new Dsy();
a="安徽";
b="北京";
c="福建";
d="甘肃";
a1="安庆";
a2="蚌埠";
b1="北京";
if(a==xiangzhen)
{
   b="";
   c="";
   d="";
}
dsy.add("0",["a","b","c","d"]);   
dsy.add("0_0",["a1","a2",]);   
dsy.add("0_1",["b1"]);   
  
     
   
  //-->   
  </SCRIPT>   
  <SCRIPT   LANGUAGE   =   JavaScript>   
  <!--   
  //**   Power   by   Fason(2004-3-11)   
  //**   Email:fason_pfx@   
   
  var s=["s1","s2","s3"];   
  var opt0   =   [" "," "];   
  function   setup()   
  {   
    for(i=0;i<s.length-1;i++)   
        document.getElementById(s[i]).onchange=new Function("change("+(i+1)+")");   
    change(0);   
  }
学习程序不仅要靠逻辑思维,还需要平常的积累,只有平常多练习,多做些小程序关键时刻才不会特别着急。
还有就是注意代码缩进格式,一大堆瘫在那里给谁看都头疼的。
#9
yms1232008-10-16 15:16
网页的其他HTML代码是怎么写的?
#10
szp20062008-10-16 15:31
我就是想要实现不同的用户登陆,二级联动菜单中只显示与它相关的信息,无关的不显示,不知道我说的是否清楚?
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!--#include file="conn_fj16.asp" -->
<!--#include file="admin_qx.asp" -->
<% issjcz %>

<html>   
  <head>   
  <title>奶牛数量</title>   
   <style>   
  body,select   
  {   
  font-size:9pt;   
  font-family:Verdana;   
  }   
  a   
  {   
  color:red;   
  text-decoration:none;   
  }   
  a:hover{   
  text-decoration:underline;   
  }   
  .style5 {color: #000000}
  .STYLE6 {
    font-size: 12pt;
    font-weight: bold;
}
  body {
    background-color: #d6dff7;
}
</style>
  <body>
 <%xiangzhen=session("xiangzhen") %>
 <form id="form1" name="form1" method="post" action="nainiushuliang_add_save.asp">
  <SCRIPT   LANGUAGE="JavaScript">  
   <!--   
  function   Dsy()   
  {   
  this.Items   =   {};   
  }   
  Dsy.prototype.add   =   function(id,iArray)   
  {   
  this.Items[id]   =   iArray;   
  }   
  Dsy.prototype.Exists   =   function(id)   
  {   
  if(typeof(this.Items[id])   ==   "undefined")   return   false;   
  return   true;   
  }   
   
  function   change(v){   
  var   str="0";   
  for(i=0;i<v;i++){   str+=("_"+(document.getElementById(s[i]).selectedIndex-1));};   
  var   ss=document.getElementById(s[v]);   
  with(ss){   
  length   =   0;   
  options[0]=new   Option(opt0[v],opt0[v]);   
  if(v   &&   document.getElementById(s[v-1]).selectedIndex>0   ||   !v)   
  {   
  if(dsy.Exists(str)){   
  ar   =   dsy.Items[str];   
  for(i=0;i<ar.length;i++)options[length]=new   Option(ar[i],ar[i]);   
  if(v)options[1].selected   =   true;   
  }   
  }   
  if(++v<s.length){change(v);}   
  }   
  }   
   
  var   dsy   =   new   Dsy();

  a="安徽",b="北京",c="福建",d="甘肃";
  a1="安庆",a2="蚌埠"
  b1="北京"
 if (a=xiangzhen)
   {b="";c="";d="";
   }
   
  dsy.add("0",["a","b","c","d"]);   
   
  dsy.add("0_0",["a1","a2",]);   
 
  dsy.add("0_1",["b1"]);   
  
     
   
  //-->   
  </SCRIPT>   
  <SCRIPT   LANGUAGE   =   JavaScript>   
  <!--   
  //**   Power   by   Fason(2004-3-11)   
  //**   Email:fason_pfx@   
   
  var   s=["s1","s2","s3"];   
  var   opt0   =   [" "," "];   
  function   setup()   
  {   
  for(i=0;i<s.length-1;i++)   
  document.getElementById(s[i]).onchange=new   Function("change("+(i+1)+")");   
  change(0);   
  }   
  //-->   
  </SCRIPT>   
  </head>   
  <body   bgcolor="#E0E0E0"   onload="setup()">
  <form   name="frm">   
    <p>&nbsp;</p>
    <table width="884" border="0" cellpadding="2" cellspacing="2" bordercolor="#F3F3F3">
      <!--DWLayoutTable-->
      <tr>
        <td height="44" colspan="2" align="right" valign="bottom" bordercolor="#999999"><div align="center" class="STYLE6">乡镇办场奶牛数量统计表</div></td>
      </tr>
      <tr>
        <td height="45" align="right" valign="bottom" bordercolor="#999999">日期:</td>
        <td width="455" align="left" valign="bottom" bordercolor="#999999"><span class="time style5">
          <select name="byear" size="1" class="put" id="select14">
            <option value=""> </option>
            <%for i=year(date) to 2050 step 1%>
            <option value="<%=i%>"><%=i%></option>
            <%next%>
          </select>
          年
          <select name="bmonth" size="1" class="put" id="select15">
            <option value=""> </option>
            <%for i=1 to 12%>
            <option value="<%=i%>"><%=i%></option>
            <%next%>
          </select>
        月</span></td>
      </tr>
      <tr>
        <td width="415" height="45" align="right" valign="bottom" bordercolor="#999999">地点:</td>
        <td align="left" valign="bottom" bordercolor="#999999"><select name="xiangzhen" size="1"   id="s1">
          </select>
          <span class="time style5">
          <select name="cun" size="1"   id="s2">
          </select>
          </span></td>
      </tr>
      <tr>
        <td height="45" align="right" valign="bottom" bordercolor="#999999">奶牛头数:</td>
        <td align="left" valign="bottom" bordercolor="#999999"><input name="shuliang" type="text" id="shuliang" size="15">
          头</td>
      </tr>
    </table>
    <p align="center">&nbsp;</p>
    <p align="center">
      <input type="submit" name="Submit" value="添加记录" style="width:120;background-color: #FFCC66; color: #000000; border: 1 solid #000000" />
    </p>
  </form>   
  </body>   
  </html>
#11
szp20062008-10-16 15:39
我想实现不同的用户登陆后,二级联动菜单中只显示与它相关的内容,无关的不显示!
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!--#include file="conn_fj16.asp" -->
<!--#include file="admin_qx.asp" -->
<% issjcz %>

<html>   
  <head>   
  <title>奶牛数量</title>   
   <style>   
  body,select   
  {   
  font-size:9pt;   
  font-family:Verdana;   
  }   
  a   
  {   
  color:red;   
  text-decoration:none;   
  }   
  a:hover{   
  text-decoration:underline;   
  }   
  .style5 {color: #000000}
  .STYLE6 {
    font-size: 12pt;
    font-weight: bold;
}
  body {
    background-color: #d6dff7;
}
</style>
  <body>
 <%xiangzhen=session("xiangzhen") %>
 <form id="form1" name="form1" method="post" action="nainiushuliang_add_save.asp">
  <SCRIPT   LANGUAGE="JavaScript">  
   <!--   
  function   Dsy()   
  {   
  this.Items   =   {};   
  }   
  Dsy.prototype.add   =   function(id,iArray)   
  {   
  this.Items[id]   =   iArray;   
  }   
  Dsy.prototype.Exists   =   function(id)   
  {   
  if(typeof(this.Items[id])   ==   "undefined")   return   false;   
  return   true;   
  }   
   
  function   change(v){   
  var   str="0";   
  for(i=0;i<v;i++){   str+=("_"+(document.getElementById(s[i]).selectedIndex-1));};   
  var   ss=document.getElementById(s[v]);   
  with(ss){   
  length   =   0;   
  options[0]=new   Option(opt0[v],opt0[v]);   
  if(v   &&   document.getElementById(s[v-1]).selectedIndex>0   ||   !v)   
  {   
  if(dsy.Exists(str)){   
  ar   =   dsy.Items[str];   
  for(i=0;i<ar.length;i++)options[length]=new   Option(ar[i],ar[i]);   
  if(v)options[1].selected   =   true;   
  }   
  }   
  if(++v<s.length){change(v);}   
  }   
  }   
   
  var   dsy   =   new   Dsy();

  a="安徽",b="北京",c="福建",d="甘肃";
  a1="安庆",a2="蚌埠"
  b1="北京"
 if (a=xiangzhen)
   {b="";c="";d="";
   }
   
  dsy.add("0",["a","b","c","d"]);   
   
  dsy.add("0_0",["a1","a2",]);   
 
  dsy.add("0_1",["b1"]);   
  
     
   
  //-->   
  </SCRIPT>   
  <SCRIPT   LANGUAGE   =   JavaScript>   
  <!--   
  //**   Power   by   Fason(2004-3-11)   
  //**   Email:fason_pfx@   
   
  var   s=["s1","s2","s3"];   
  var   opt0   =   [" "," "];   
  function   setup()   
  {   
  for(i=0;i<s.length-1;i++)   
  document.getElementById(s[i]).onchange=new   Function("change("+(i+1)+")");   
  change(0);   
  }   
  //-->   
  </SCRIPT>   
  </head>   
  <body   bgcolor="#E0E0E0"   onload="setup()">
  <form   name="frm">   
    <p>&nbsp;</p>
    <table width="884" border="0" cellpadding="2" cellspacing="2" bordercolor="#F3F3F3">
      <!--DWLayoutTable-->
      <tr>
        <td height="44" colspan="2" align="right" valign="bottom" bordercolor="#999999"><div align="center" class="STYLE6">乡镇办场奶牛数量统计表</div></td>
      </tr>
      <tr>
        <td height="45" align="right" valign="bottom" bordercolor="#999999">日期:</td>
        <td width="455" align="left" valign="bottom" bordercolor="#999999"><span class="time style5">
          <select name="byear" size="1" class="put" id="select14">
            <option value=""> </option>
            <%for i=year(date) to 2050 step 1%>
            <option value="<%=i%>"><%=i%></option>
            <%next%>
          </select>
          年
          <select name="bmonth" size="1" class="put" id="select15">
            <option value=""> </option>
            <%for i=1 to 12%>
            <option value="<%=i%>"><%=i%></option>
            <%next%>
          </select>
        月</span></td>
      </tr>
      <tr>
        <td width="415" height="45" align="right" valign="bottom" bordercolor="#999999">地点:</td>
        <td align="left" valign="bottom" bordercolor="#999999"><select name="xiangzhen" size="1"   id="s1">
          </select>
          <span class="time style5">
          <select name="cun" size="1"   id="s2">
          </select>
          </span></td>
      </tr>
      <tr>
        <td height="45" align="right" valign="bottom" bordercolor="#999999">奶牛头数:</td>
        <td align="left" valign="bottom" bordercolor="#999999"><input name="shuliang" type="text" id="shuliang" size="15">
          头</td>
      </tr>
    </table>
    <p align="center">&nbsp;</p>
    <p align="center">
      <input type="submit" name="Submit" value="添加记录" style="width:120;background-color: #FFCC66; color: #000000; border: 1 solid #000000" />
    </p>
  </form>   
  </body>   
  </html>
#12
yms1232008-10-16 16:05
<%xiangzhen=session("xiangzhen") %>
<form id="form1" name="form1" method="post" action="nainiushuliang_add_save.asp">
<SCRIPT   LANGUAGE="JavaScript">
//这段代码的问题非常严重逻辑很混乱
//首先这个Dsy的定义到是没什么问题
function Dsy()   
{   
  this.Items={};   
}   
Dsy.prototype.add=function(id,iArray)   
{   
  this.Items[id]=iArray;   
}   
Dsy.prototype.Exists=function(id)   
{   
  if(typeof(this.Items[id])=="undefined")   
     return false;   
  return true;   
}
//上面的代码定义了一个Dsy的类
//关键问题在下面的change过程和调用代码   
function change(v)
{   
  var str="0";
  //单看这个循环看不出问题
  //但是setup最后change(0);这里的参数给的能使这段循环出问题
  //i=0;i<v这里的v在调用change时为0,而循环开始i=0,但i并不小于0不符合循环条件   
  for(i=0;i<v;i++)
  {   
      str+=("_"+(document.getElementById(s[i]).selectedIndex-1));
  }   
  var ss=document.getElementById(s[v]);   
  with(ss)
  {   
     length=0;   
     options[0]=new Option(opt0[v],opt0[v]);
     //接下来这两个判断更有问题   
     if(v&&document.getElementById(s[v-1]).selectedIndex>0||!v)   
     {
        //这里用str作参数传递
        //Dsy.prototype.Exists注意上面这个代码函数的定义
        //this.Items[id]这里的Items是数组id应为数字型,而id是Exists函数的参数
        //这里的str被初始化为字符串型 var str="0";并且Exists内对此未做任何处理  
        if(dsy.Exists(str))
        {   
           ar=dsy.Items[str];//上面已经说过了Items是一种动态数组str是字符串
           //这个循环就更有问题了  
           for(i=0;i<ar.length;i++)
               options[length]=new Option(ar[i],ar[i]);
               //length是ss下拉框元素的长度
               //length=0;   
               //options[0]=new Option(opt0[v],opt0[v]);
               //上面这两句对ss的length和首个选项做了初始化
               //问题时这个length++的代码在哪里?
               //循环这么长时间都只给了首个选项   
           if(v)
               options[1].selected=true;   
        }   
     }   
     if(++v<s.length)
     {
        change(v);
     }   
   }   
}   
var dsy=new Dsy();
a="安徽";
b="北京";
c="福建";
d="甘肃";
a1="安庆";
a2="蚌埠";
b1="北京";
//还有这个判断a==xiangzhen
//select name="xiangzhen"这里的xiangzhen是下拉框a是字符串
//这两个永远都不是一个类型的变量或对象如何相等呢?
if(a==xiangzhen)
{
   b="";
   c="";
   d="";
}
dsy.add("0",["a","b","c","d"]);   
dsy.add("0_0",["a1","a2",]);   
dsy.add("0_1",["b1"]);   
  
//剩下的都不想看了,光上面的代码就有不少问题,这的确不可能显示出内容     
   
  //-->   
  </SCRIPT>   
  <SCRIPT   LANGUAGE   =   JavaScript>   
  <!--   
  //**   Power   by   Fason(2004-3-11)   
  //**   Email:fason_pfx@   
   
  var s=["s1","s2","s3"];   
  var opt0   =   [" "," "];   
  function setup()   
  {   
    for(i=0;i<s.length-1;i++)   
        document.getElementById(s[i]).onchange=new Function("change("+(i+1)+")");   
    change(0);   
  }
#13
szp20062008-10-16 17:01
那我应该怎么办啊,,
中间二级联动的代码是从网上下载的
#14
yms1232008-10-16 21:05
<%xiangzhen=session("xiangzhen") %>
<form id="form1" name="form1" method="post" action="nainiushuliang_add_save.asp">
<SCRIPT   LANGUAGE="JavaScript">  
function Dsy()   
{   
  this.Items={};   
}   
Dsy.prototype.add=function(Sel,Txt)   
{   
  Sel.add(new Option(Txt,Txt));   
}
Dsy.prototype.RemoveAll=function(Sel)
{
   for(var i=0;i<Sel.options.length;i++)
       Sel.remove(i);
}   
function change(v)
{
   var ds=new Dsy();
   switch(v)
   {
      case 1:
         var sel=document.getElementById("s1");
         if(sel.options.length<=0)
         {
            for(var i=0;i<Provinces.length;i++)
               ds.add(sel,Provinces[i]);
         }  
      break;
      case 2:
         var sel=document.getElementById("s2");
         var selValue=sel.options[sel.selectedIndex].value;
         ds.RemoveAll(sel);
         for(var r=0;r<City.length;r++)
         {
            if(City[r][0]==selValue)
            {
               for(var c=0;c<City[r].length;c++)
               {
                   if(City[r][c]!=selValue)
                      ds.add(sel,Provinces[i]);
               }
            }
         }  
      break;
   }   
}   
var dsy=new Dsy();
var Provinces=new Array();
Provinces[0]="安徽";
Provinces[1]="北京";
Provinces[2]="福建";
var City=new Array();
City[0]=new Array();
City[0][0]="安徽";
City[0][1]="合肥市";
City[0][2]="芜湖市";
City[1]=new Array();
City[1][0]="北京";
City[1][1]="宣武区";
City[1][2]="海淀区";
City[2]=new Array();
City[2][0]="福建";
City[2][1]="福州市";
City[2][2]="厦门市";
City[2][3]="莆田市";


     
   
  //-->   
  </SCRIPT>   
  <SCRIPT   LANGUAGE   =   JavaScript>   
  <!--   
  //**   Power   by   Fason(2004-3-11)   
  //**   Email:fason_pfx@   
   
  var s=["s1","s2"];   
  function setup()   
  {   
    for(i=0;i<s.length-1;i++)   
        document.getElementById(s[i]).onchange=new Function("change("+(i+1)+")");
    change(0);   
  }
楼主应该学习一下javascript,平时多多练习写些程序,这回帮你写了,下回自己琢磨。

[[it] 本帖最后由 yms123 于 2008-10-16 21:07 编辑 [/it]]
#15
szp20072008-10-16 21:28
版主,辛苦了,我还以为没人肯帮我了呢,javascript我一点都不会,从来没学过,所以也看不懂,VB什么的还学过一点,被领导逼上梁山,没办法!
还有一个问题:我想用条件来控制二级联动,某个地区的用户只能录入当地的信息,所以,其他地区的名称就不能显示在菜单中,再次请教:这个判断怎么来写??
#16
nicechlk2008-10-17 16:07
14楼把联动菜单代码都给你了,剩下的自己好好研究吧。
这里是学习和讨论某个相关问题,而不是完整的代码咋写呀。
1