你可以把数据预先读出,生成javascript字符串,设定为javascript下拉菜单的值。但是值太多的时候,会影响速度。

解决方案 »

  1.   

    严重NOD.数据量大的话,会严重影响速度.
      

  2.   

    xml和javascript都可以!javascript用文本和变量都行!用jsp输出javascript的html嵌套代码,送到客户端也不过是文本多一点;变量读取是最快的方式,加上javascript的本地判别变量,动态向input标签送值就ok了!我想你的难题还是在input加减值的操纵,可以参考页面运行时(just in time)语法书!
      

  3.   

    纠正:以上的input应该是select!--<select>标签</select>
      

  4.   

    能不能给一段代码我们下载一下,谢谢大家了,[email protected]
      

  5.   

    关于XMLHTTP取值的程序我下载了ASP版的调试成功了,但我转换成JSP就一直会出现些问题,请帮我指点一下jsp中采用sqlserver数据库txywgl
    表名china
    (也可以用SQLSERVER导入工具导入data.mdb)创建数据表的SQL语句CREATE TABLE china (
    id Integer,
    province VarChar(50),
    city VarChar(50))
    第二个下拉框中总是显示一堆错误,返回不了我想要的值select.htm<script language="JavaScript">
    function GetResult(str)
    {
    /*
     *--------------- GetResult(str) -----------------
     * GetResult(str) 
     * 功能:通过XMLHTTP发送请求,返回结果.
     * 参数:str,字符串,发送条件.
     * 实例:GetResult(document.all.userid.value);
     * author:wanghr100(灰豆宝宝.net)
     * update:2004-5-27 19:02
     *--------------- GetResult(str) -----------------
     */
        var oBao = new ActiveXObject("Microsoft.XMLHTTP");
        oBao.open("POST","server.jsp?sel="+str,false);
        oBao.send();
        //服务器端处理返回的是经过escape编码的字符串.
        //通过XMLHTTP返回数据,开始构建Select.
        BuildSel(unescape(oBao.responseText),document.all.sel2)
    }function BuildSel(str,sel)
    {
    /*
     *--------------- BuildSel(str,sel) -----------------
     * BuildSel(str,sel) 
     * 功能:通过str构建Select.
     * 参数:str,字符串,由服务端返回的.有特定结构"字符串1,字符串2,字符串3"
     * 参数:sel,要构建的Select
     * 实例:BuildSel(unescape(oBao.responseText),document.all.sel2)
     * author:wanghr100(灰豆宝宝.net)
     * update:2004-5-27 19:02
     *--------------- BuildSel(str,sel) -----------------
     */
        //先清空原来的数据.
        sel.options.length=0;
        var arrstr = new Array();
        arrstr = str.split(",");
        //开始构建新的Select.
        for(var i=0;i<arrstr.length;i++)
        {
            sel.options[sel.options.length]=new Option(arrstr[i],arrstr[i])
        }
    }
    </script>
    <select name="sel" onChange="GetResult(this.value)">
    <option value="">请选择
    <option value="福建省">福建省
    <option value="湖北省">湖北省
    <option value="辽宁省">辽宁省
    <select>
    <select name="sel2"></select>
     <%@ page contentType="text/html; charset=gb2312" %>
     <%@ page import="javax.naming.Context" %> 
     <%@ page import="javax.sql.DataSource"%> 
     <%@ page import="javax.naming.InitialContext"%> 
     <%@ page import="java.sql.*"%> 
     <%@ page import="java.util.*"%> 
    <%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=txywgl";
    String user="sa";
    String password="";
    Connection conn=DriverManager.getConnection(url,user,password);
    Statement stmt=conn.createStatement();
    var province = request.getParameter("sel");
    var arrResult = new Array();
    var sql = "select city from china where province='"+province+"'";
    ResultSet rs=stmt.executeQuery(sql);
    try
                            {
    while(!rs.EOF)
    {
        //遍历所有适合的数据放入arrResult数组中.
        arrResult[arrResult.length] = rs("city").Value;
        rs.MoveNext();
    }
    //escape解决了XMLHTTP。中文处理的问题.
    //数组组合成字符串.由","字符串连接.
    out.println(escape(arrResult.join(",")));
            }
                    catch (Exception e)
                           {
                              out.println(e.getMessage());
                           }%>
      

  6.   

    楼主注意啦:csdn论坛中web板块有个超级大笨狼的四级连动下拉菜单,采用access数据库,10万条数据运行如飞,搜搜一下吧
      

  7.   

    我做过三级的,也是从数据库里读数据的。
    用的是IFAME,数据库是父子关系结构。当然要用JAVASCRIPT了。
      

  8.   

    我做三级联动的,可以改成四级,不过做的不大好,可以抽和用而已<form name="frm">
    <select name="firstLevel" onchange="_viewSecondLevel();">
      <option>-请选择-</option>
    </select>
    <select name="secondLevel" onchange="_viewThirdLevel();">
      <option>-请选择-</option>
    </select>
    <select name="thirdLevel">
      <option>-请选择-</option>
    </select>
    </form><!------三级联动菜单DEMO ->
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var record = new Array();
    record[0] = "1,1.1,1.1.1"
    record[1] = "1,1.1,1.1.2"
    record[2] = "1,1.2,1.2.1"
    record[3] = "1,1.2,1.2.2"
    record[4] = "2,2.1,2.1.1"
    record[5] = "2,2.1,2.1.2"
    record[6] = "2,2.2,2.2.1"
    record[7] = "2,2.2,2.2.2"//显示第一级
    var sForm = document.frm;
    var first = sForm.firstLevel;var firstLevelLength = 1
    var firstLevels = "";
    var index = 1;
    for(var i=0;i < record.length;i++){
       var recordArray = record[i].split(",")
       if(!contains(firstLevels,recordArray[0])){   
        first.options[index++]=new Option(recordArray[0],recordArray[0]);
    if (firstLevels != "") firstLevels += ",";
    firstLevels += recordArray[0];
    }
    }
    //判断用","分开字符串str1中是否有str2
    function contains(str1, str2) 
    {
        a=str1.split(",")
        for (var i = 0;i<a.length;i++) {
        
            if(str2==a[i]){
                return true;
            }
        }
        return false;
    }function _viewSecondLevel()
    {
        var second = sForm.secondLevel;
        var third = sForm.thirdLevel; var firstValue = sForm.firstLevel.value;    var secondLevelLength = 1
        var secondLevels = ""
        var index = 1;
        for(var i=0;i < record.length;i++){
            var recordArray = record[i].split(",")
    if(firstValue ==recordArray[0] && !contains(secondLevels,recordArray[1])){   
    second.options[index++]=new Option(recordArray[1],recordArray[1]);
    if (secondLevels != "") secondLevels += ",";
    secondLevels += recordArray[1];
    }
    }
        third.length=0
        third.options[0]=new Option("请选择","")
    _viewThirdLevel()
    }function _viewThirdLevel()
    {
        var third = sForm.thirdLevel; var firstValue = sForm.firstLevel.value;
    var secondValue = sForm.secondLevel.value;    var thirdLevelLength = 1
        var thirdLevels = ""
        var index = 1;
        for(var i=0;i < record.length;i++){
            var recordArray = record[i].split(",")
    if(firstValue ==recordArray[0] && secondValue == recordArray[1] && !contains(thirdLevels,recordArray[2])){   
    third.options[index++]=new Option(recordArray[2],recordArray[2]);
    if (thirdLevels != "") thirdLevels += ",";
    thirdLevels += recordArray[2];
    }
    }
    }
    //-->
    </SCRIPT>
      

  9.   

    var record = new Array();
    这个数组,你可以用java从数据库里读出来,再赋给他,就是从数据库里动态生成的了
      

  10.   

    很多人使用的都是javascript数组的方式
      

  11.   

    oyp说的好,楼主我因为需求需要已经不必用四级菜单了,但是怎么做在这段时间实践中已经心里大致有底了,正像oyp说的,我用jsp与js结合完全可以办到,不过我也有另外的办法,但没试过就不说了,呵呵,当时以为这个问题解决不了了,过了一个多月来看看觉得大家都很热心,现在我遇到一个框架问题,有兴趣的朋友可在多媒体/设计,网页设计里有我的问题,请大家看看