jsp+js实现的二级联动菜单

以前看朋友写二级联动菜单思路都是先取得大类的数据,当选择大类后用url传值的方式传给页面一个值,然后根据这个值从数据库取出相应的小类的值.一直觉得这个思路虽然直接,但好像要频繁的读取数据库,而且如果表单里有多个选项的话,有时候似乎并不方便.到网上找了静态的javascript联动菜单.改了改后,感觉还可以:

 

    原javascript代码:

         <SCRIPT language=javascript>
<!--
var subcat = new Array();
subcat[0] = new Array('no','大类','12')
subcat[1] = new Array('pinp','楼宇包装','louy')
subcat[2] = new Array('pinp','会场布置','meet')
subcat[3] = new Array('pinp','开日庆典','kai')
subcat[4] = new Array('pinp','婚庆礼仪','hun')
<!--changeselect1(5)-->
function changeselect1(locationid)
{
 form1.smallclass.length = 0; //初始化下拉列表 清空下拉数据
 for (i=0; i<subcat.length; i++) //legth=20
 {
  if (subcat[i][0] == locationid) //[0] [1] 第一列 第二列 subcat[i][2]为s2的value值
  {
   form1.smallclass.options[form1.smallclass.length] = new Option(subcat[i][1], subcat[i][2]);//建立option
  }
 }
}

//-->
</SCRIPT>

 

 一级分类:
<SELECT onChange="changeselect1(this.options[this.selectedIndex].value)" name="bigclass">
         <OPTION>=请选择=</OPTION> 
         <OPTION value="pinp">品牌策划</OPTION>
         <OPTION value="design">设计印刷</OPTION>
         <OPTION value="media">户外传媒</OPTION>
         <OPTION value="jiag">工艺加工</OPTION>
</SELECT>
         二级分类:
         <SELECT id="smallclass" name="smallclass">
         </SELECT>

 

 

----------------------------------------------------

     数据库中大类:bigclass:pid,pName

                     小类:smallclass:psid,pscName,pid

我的思路是:从数据库中取出大类与小类的值,填充在javascript里,这样只须读取一次数据,剩下的事就交给js去处理了.

定义两个ResultSet 对象rssml rsbig.上面JS代码更改后,

 

<SCRIPT language=javascript>
<!--
var subcat = new Array();
<%  int h=0;
    while(rssml.next())
    { %>
     
      subcat[<%=h%>] = new Array('<%= rssml.getInt("pcid")%>','<%= rssml.getString("pscName") %>','<%= rssml.getInt("psid") %>');     <%h++; } %>
<!--changeselect1(5)-->
function changeselect1(locationid)
{
 form1.smallclass.length = 0; //初始化下拉列表 清空下拉数据
 for (i=0; i<subcat.length; i++) //legth=20
 {
  if (subcat[i][0] == locationid) //[0] [1] 第一列 第二列 subcat[i][2]为s2的value值
  {
   form1.smallclass.options[form1.smallclass.length] = new Option(subcat[i][1], subcat[i][2]);//建立option
  }
 }
}

//-->
</SCRIPT>

 

<select name="bigclass" onChange="changeselect1(this.options[this.selectedIndex].value)">
<option>请选择大类</option>
<% while(rsbig.next())
      {%>
    <option value='<%= rsbig.getInt("pcid") %>'><%= rsbig.getString("pcName") %></option>
  <%} %>
</select>
&nbsp;
<select name="smallclass" id="smallclass">
<option>请选择小类</option>
</select>

 

发现速度确实快了,不过有个缺点就是但查看源代码时,很容易发现你数据库字段的一些对应值.

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值