已知session中存在两个list。一个是省份(pro),一个是城市(city),都是从数据库中拿出来的。pro类里面有一个city集合属性,city类里面有一个pro属性,多对一双向关联了JSP页面对应两个下拉框,现在想要实现的功能是省份的option值改变后,城市的option自动更新我对JS不熟,只知道可以添加 onchange="js函数",但是这个函数里面具体怎么获得session中的值,又是怎么筛选后往city组件里面增加option的,求高手解决!!

解决方案 »

  1.   

    <html>
    <head>
    <script language="javascript" type="text/javascript">
        var sheng1=new Array("A-A市","A-B市","A-C市","A-D市","A-E市","A-F市","A-G市","A-H市","A-I市");
        var sheng2=new Array("B-A市","B-B市","B-C市","B-D市","B-E市","B-F市","B-G市","B-H市","B-I市");
        
        function changeds(){
            if(document.getElementById("select").value=="0"){
                select2.innerHTML="";
                return false;
            }
            if(document.getElementById("select").value=="1"){
                show(sheng1);
            }else if(document.getElementById("select").value=="2"){
                show(sheng2);
            }
            return false;
        } function show(obj){
      
     var selectxx= document.getElementById("selectx");
    var opt;
    selectxx.innerHTML="市县";
     for(var j=0;j<obj.length;j++){
            opt=document.createElement("option");
          
            opt.setAttribute("value",j);
     
            opt.innerHTML=obj[j];
            selectxx.appendChild(opt);
        }
    return true;
    }   
    </script>
        <title>
    联动菜单
    </title></head>
    <body>
        <form name="form1" method="post" action="" id="form1">
        <div>
          <select name="select" onchange="return changeds()">
            <option value="0" selected>请选择</option>
            <option value="1">A省</option>
            <option value="2">B省</option>
          </select>
          <select name="selectx" id="selectx">
    <option  value="0" >
    市县
    </option>
    <select>
        </div>
        </form>
    </body>
    </html>
      

  2.   

    LZ  是想 实现 省市级联查询是吧?是的话 我这里有,数据库的建表 插入 语句也有;页面代码也有;要的话给我E-mail([email protected])  我发你  
      

  3.   

    1楼的是可以实现动态改变,但是数据都已经在页面初始化好了,不过还是谢谢哦现在的难点是在数据库中拿出来的数据是存在session中的两个list,
    list中的类之间有关联关系,如何在jsp中拿到这些数据和其中的关联关系。并动态给select增加option
      

  4.   

    ${sessionScope.list1.get(0).getId()}  //记得这样可以
     或者<c:forEach>
      

  5.   

    这个 我建议你在JSP页面 直接写死,也省的 调用数据库了,个人建议
      

  6.   


    这个只能在JSP上拿到数据。。但是onclick里面调用的是JS函数,怎么获得这些数据呢
    回六楼,这些东西我只是举例子,实际业务上不像省份一样可以写死的,是需要动态拿出来的,还可以增加和删除
      

  7.   

    <%
     List pro= request.getSession.getAttribute("pro");
     List city= request.getSession.getAttribute("city");
     %>
    <script language="javascript" type="text/javascript">
    var pro=new Array();var cityName=new Array();
    var cityId=new Array();
    <%
    for(int i=0;i<pro.size();i++){
    %>
    //初始化省份名称和id
    pro["<%=pro.get(i).getProId()%>"]="<%=pro.get(i).getProName()%>";
    <%
    for(int j=0,k=0;j<city.size();j++){
    //如果城市是属于本省
        if(city.get(j).getProName().equal(pro.get(i).getProName())){%>
    cityName["<%=pro.get(i).getProName()%>"][<%=k%>]=<%=city.get(j).getCityName()%>;
    cityId["<%=pro.get(i).getProName()%>"][<%=k%>]=<%=city.get(j).getCityId()%>;
    <%
    k++;
    }
    }
    %>
    <%
    }
    %>
    function addoption(value,show,selectObj){
    selectname.options.length=0;
    for(var i=0;i<show.length;i++){
    var aNewOption=new Option(show[i],value[i]);
    selectname.options[selectname.options.length]=aNewOption;
      }
    }
    function changeds(){
      if(document.getElementById("select1").value=="0"){
      document.getElementById("select2").innerHTML="<option value='0' >市县</option>";
      }else{
       var index=document.getElementById("select1").text;   
       addoption(cityId[index],cityName[index],document.getElementById("select2"));   
      }
    }
    </script>  <select id="select1" onchange="changeds();">
      <option value="0" selected>请选择</option>
      <%
    for(int i=0;i<pro.size();i++){
    %>
      <option value="<%=city.get(j).getCityId()%>"><%=pro.get(i).getProName()%></option>
     <%}%>
      </select>
    <select id="select2">
    <option value="0" >
    市县
    </option>
    <select>
      

  8.   

    lz你可以用ajax解决这个问题省份select onchange的时候 创建XMLHttpRequest对象发送请求并把当前省份当参数传到后台后台根据传入的省份获得该省份下的市集合并以xml或json返回前台在回调函数中 将返回的数据更新的市select中
     
    另:把省份和城市信息存入session不妥吧 这样每一个session都保存着这些省市信息 浪费内存啊
      

  9.   

    js是客户端代码,你还是把所有数据一次性放到js里面吧,要么使用ajax动态获取
      

  10.   

    谢谢大家,我还是去看看AJAX吧,JS拿这个数据有点麻烦,结贴