用javascript写是不现实的想法。难道你想把全部记录都取到客户端吗?毛毛所说不错,只能选第A值后,重新到服务器上取记录。你可以做成iframe的形式,也就是说两个select不在一个frame里,B列表在一个小的iframe中,这样整个页面不会显得又被重载了一次,只重载这个小iframe中的内容即可。不过这们你要考虑的是它们在不同的form中了,提交的时候你就必须多些处理。

解决方案 »

  1.   

    如果表B 的数据不是很多也可考虑用数组和javascript 结合来用
      

  2.   


    用javascript写是不现实的想法。难道你想把全部记录都取到客户端吗?毛毛所说不错,只能选第A值后,重新到服务器上取记录。你可以做成iframe的形式,也就是说两个select不在一个frame里,B列表在一个小的iframe中,这样整个页面不会显得又被重载了一次,只重载这个小iframe中的内容即可。不过这们你要考虑的是它们在不同的form中了,提交的时候你就必须多些处理。
      

  3.   

    一次性把数据取出,然后用javascript实现页面的操作
      

  4.   

    我也觉得挺麻烦的,不像写windows应用程序,我也写了一个jsp。有四级列表,代码长又乱。不知道大家是如何实现这种功能的。
      

  5.   

    如果数据量不是特大的话,还是用javascript较好,数据一次全查出来,用select项的onchang触发javascript函数动态改变下拉列表的值,这样我认为比没动一次都要重新连接数据库查询要好的。
      

  6.   

    我这有一个例子
    显示页面的jsp
    <jsp:include page="prnArr.jsp" flush="true"/>
    <script src = "list_change.js">
    </script>
    <html>
    <head>
    <title>list_change_test1</title>
    </head>
    <body >
    <H1>list_change_test1</H1>
    <form name="list1">
    <table>
    <TR>
    <TD >IT技术分类</TD>
    <TD>
    <SELECT name=SkillName onchange="JavaScript:Sublist(list_data,this,list1.SubSkill)">
    <OPTION selected value=-1>---请选择---</OPTION> 
    <script language="javascript">
    Mainlist(list_data,0,"0000",6);
    </script>
    </TD>
    <TD>IT技术分类明细</TD>
                    <TD>
    </SELECT> 
    <SELECT name=SubSkill onchange="JavaScript:Sublist(list_data,this,list1.SubSkill1)">
    </SELECT></TD>
    <TD>IT技术分类明细</TD>
                    <TD>
    </SELECT> 
    <SELECT name=SubSkill1 >
    </SELECT></TD>
    </TR>
    </table>
    </form><html>              
    》》》》》》》》》》》》》》》》》》》》》》》》》》
    prnArr.jsp:<%@page import="java.sql.*" %>
    <%@page import="std.*" %>
    <%@ page language="java" contentType="text/html;charset=gb2312" %> 
    <%        std.bfstd prn = new std.bfstd();               //数据库连接
            ResultSet rs = prn.GetResultBySelect ("select dm,mc from dm_mx where dmm = \'0006\' order by dm ");
            out.println("<script language=javascript >");
            out.println("list_data=new Array(");
            if(rs.next()) 
            {
             out.println("\""+rs.getObject(1)+"\",\""+rs.getObject(2)+"\"");
            }
            while(rs.next())
            {
             out.println(",\""+rs.getObject(1)+"\",\""+rs.getObject(2)+"\"");
            }
            out.println(");\n</script>");
     %>
                 》》》》》》》》》》》》》》》》》》》》》》
    javascript函数list_change.js://File Name:list_change.js
    //Author:ligyi
    //Date:2002.2.4
    //Note:根据MainList动态改变SubList值./*方法 Mainlist()     功能:      显示MainList的值
                             入口参数:  数组名,数组开始索引(可选,defualt:0),
                                        MainList项末尾标志(可选,defualt:无),MainList项长度(可选,defualt:无)
                             出口参数:  无方法 Sublist()      功能:      显示Sublist的值
                             入口参数:  数组名,MainList名,Sublist名,主、子项末尾差异位数(可选,defualt:2)
                             出口参数:  无*/function Mainlist()
    {
    var i,start,step,len,a,EndMark,args=Mainlist.arguments;
    a = args[0];
    len = a.length;
    start = (args.length>=2)?args[1]:0;
    step = 2;
    EndMark = (args.length>=3)?args[2]:"-1";
    Mainlen = (args.length>=4)?args[3]:-1; for(i=start;i<len;i+=step)
    {
         if (Mainlen != -1)
         {
          if(a[i].length == Mainlen)
       if (EndMark == "-1")
    document.writeln("<option value="+a[i]+">"+a[i+1]+"</option>");
       else if (a[i].substr(a[i].length - EndMark.length) == EndMark)
    document.writeln("<option value="+a[i]+">"+a[i+1]+"</option>");
                 }
                 else
                 {     
                     if (EndMark == "-1")
    document.writeln("<option value="+a[i]+">" + a[i+1] + "</option>");
       else if (a[i].substr(a[i].length - EndMark.length) == EndMark)
    document.writeln("<option value="+a[i]+">"+a[i+1]+"</option>");
         } }
    }function Sublist()
    {
    var i,len,start,step,s1,s2,steplen,a,args=Sublist.arguments;
    var mainVal,val,name;
    a=args[0];
    s1=args[1];
    s2=args[2];
    steplen = (args.length>=4)?args[3]:2;
    start=0;
    step=2;
    len=a.length;
    mainVal=s1.options[s1.selectedIndex].value;
    for(i=s2.length-1;i>=0;i--)
    {
    s2.options[i]=null;
    }
    s2.options[0]=new Option("-请选择-","-1",false,false);
    if(Number(mainVal)!=-1)
    {
    for(i=start;i<len;i+=step)
    {
    val = a[i];
    name = a[i+1];
    if(val.length >= mainVal.length && val.substr(0,val.length-steplen)==mainVal.substr(0,val.length-steplen) && val.substr(steplen)!=mainVal.substr(steplen))
    {
    s2.options[s2.length]=new Option(name,val,false,false);
    }
    }
    }
    }