就是上面这个已经实现了,但第二个下拉框的值获取不了;前台jsp主要代码贴上:那段javascript没贴上;change8.jsp<div id="form">
<form name="great" action="change9.jsp" method="post">

<h2 class="tit2" style="color:#FFFFFF">线路站点删除</h2>
<br/>

<h3 style="color:#FFFFFF">选择线路:
<select name="select1" id="select1" onchange="getLevel2()">
<option value="0">--请选择--</option>
<%
while (rs.next())
{
%>
<option value="<%=rs.getString(1)%>"><%=rs.getString(1)%></option>
<%
}
rs.close();
statement.close();
conn.close();
%>
</select>  <br/>
<h3 style="color:#FFFFFF; margin:50px">选择要删除的站点:
<select name="select2" id="select2">

<option value="0">--请选择--</option>

</select>
</div>
</html>
实现连个下拉框变化的代码:do1.jsp:<%@page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.sql.*,java.io.*"%>
<%
String route=new String(request.getParameter("route").trim().getBytes("ISO8859_1"),"gb2312"); System.out.println(route);
String userName = "sa";
String userPasswd = "111111";
//需要连接的数据库名
String dbName = "IntelligentBus";
//表名
String tableName = "Stop_RouteInfor";
String url = "jdbc:sqlserver://localhost:1433;databaseName=IntelligentBus";
//创建连接并执行查询操作
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
.newInstance();
Connection conn = DriverManager.getConnection(url, userName,
userPasswd);
Statement statement = conn.createStatement();
String sql = "SELECT stop FROM " + tableName
+ "  where route='" + route+"'";
System.out.println("sql:"+sql);
ResultSet rs = statement.executeQuery(sql); //获取数据结果集
response.setContentType("text/html; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter pout = null;
pout = response.getWriter();
pout.print("[");
while (rs.next()) {
try { pout.print("'" + (rs.getString("stop")) + "',");
pout.print(",");
} catch (Exception e) {
e.printStackTrace();
}
}
pout.print("0]");
rs.close();
statement.close();
conn.close();
%>把操作这连个下拉框的代码页贴上一点;change9.jsp<%@page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@page import="java.sql.*"%>
<%@include file="connection.jsp"%><html> <head>
</head> <body>
<%
ResultSet rs1;
String sqlstr;
String select1=new String(request.getParameter("select1").trim().getBytes("ISO8859_1"),"gb2312");//这个可以获取
String select2=new String(request.getParameter("select2").trim().getBytes("ISO8859_1"),"gb2312");//这个获取不了,主要就是获取它的
System.out.println(select1+select2);//下面就是操作数据库的,没贴上来
</body>
</html>目的就是获取第二个下拉框的值,希望有兴趣的网友能帮忙解决一下,急用,等着大家啊jsp数据库javascript

解决方案 »

  1.   

    没看完全部代码,但是我是这样实现的,我是用jquery实现的
      

  2.   

    这个最好用ajax做,体验效果会好点
      

  3.   

    document.getElementById("select2").value
      

  4.   

    这行代码是放到change9.jsp中吗?为什么直接放进去不行呢?
      

  5.   

    这行代码是放到change9.jsp中吗?为什么直接放进去不行呢?
    只要能在change9.jsp中获取就行,能不能说具体点。
      

  6.   

    对,就是这样的,你看我的代码,在do1.jsp中我也查询了第一个下拉框对应的第二个下拉框的值,并且测试时第二个下拉框中的值也是对的,但就是获取不了(如何赋值给第二个下拉框),请问如何获取,整个小项目就差这点了,拜托了!
      

  7.   

    这个我以前做过类似的,就是选择地区的多级联动下拉列表,主要采用ajax异步获取,当然你在建表插入数据的时候要有一定的联系,比如你那里的第一个下拉存储在数据库的表的主键设置成下面一个在数据库中表的外键,通过选择线路,就能查询到这条线路相关的站点。首先表建好之后,加载页面的时候就要加载第一个下拉框中的数据,同时在这个下拉框上加上onchange事件,改变时触发,触发的事件里面用ajax异步向后台请求,从数据库中查询出第二张表的数据,然后通过ajax的回调函数将数据加载到第二个下拉框中,就可以实现你所要求的功能,当然还有一些细节要注意,比如选择第一个下拉框中的值时触发事件,进而通过ajax后台取数据并加载到第二个下拉框中,这中间是需要时间的,所以一般要在中间设置延时,还有就是多次选择时,下拉框要把上一次的历史数据清除等等
      

  8.   

    说的我也稍微有点懂,但我用了javascript来实现的,ajax我不太会,我觉得用javascript也能实现,现在的确是实现了,就是第二个下拉框可以随着第一个下拉框的变化而变化,但当获取第二个下拉框的内容然后进行操作时,不知道如何获取第二个下拉框的值,请问我这该如何实现?
      

  9.   

    每个下拉框都有一个ID,或者name吧,你直接取到这个就好了,然后拿到里面的值,一般一个下拉框都是一个name显示,id隐藏,传值传ID
      

  10.   

    就是因为取不到啊,我发帖就是为了让人帮助我如何取到那个值啊,能否看看代码给点建议啊?
    看完你的代码了,但是看你的描述,我有点不明白
    1.你的第二个下拉框,联动时候里面会显示值的?
    2.你的getLevel2()这里是怎么存放第二个下拉框的值
      

  11.   

    就是因为取不到啊,我发帖就是为了让人帮助我如何取到那个值啊,能否看看代码给点建议啊?
    看完你的代码了,但是看你的描述,我有点不明白
    1.你的第二个下拉框,联动时候里面会显示值的?
    2.你的getLevel2()这里是怎么存放第二个下拉框的值
    第二个下拉框可以显示值,是通过do1.jsp中的显示的;
    哦,那段javascript忘记贴上了,是这样的:<script language="JavaScript" type="text/javascript">
     <!--
     var cache = [];
     function getLevel2() {
     if (document.forms.great.select1.selectedIndex == 0) {
     //当一级菜单未被选中时,二级菜单保持初始状态
     document.forms.great.select2.length = 1;
     return;
     }
     //如果当前二级分类没有缓存时,则从服务器获取数据 if (!cache[document.forms.great.select1.selectedIndex]) { //创建跨浏览器的XMLHttpRequest对象
     var xmlhttp;
     try {
     //IE 5.0 
     xmlhttp = new ActiveXObject('Msxm12.XMLHTTP');
     } catch (e) {
     try{
     //IE 5.5 及更高版本 xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) {
     try {
     //其他浏览器
     xmlhttp = new XMLHttpRequest();
     } catch (e) {}
     }
     }
     xmlhttp.open("get", "do1.jsp?route="
     + document.forms.great.select1.value);
     xmlhttp.onreadystatechange = function() {
     if (xmlhttp.readyState == 4) {
     if (xmlhttp.status == 200) {
     cache[document.forms.great.select1.selectedIndex] = eval("("
     + xmlhttp.responseText + ")");
     getLevel2();
     }
     }
     }; xmlhttp.send(null);
     return;
     }
     document.forms.great.select2.length = 1; var _arr = cache[document.forms.great.select1.selectedIndex]; for ( var i = 0; i < _arr.length - 1; i += 2) { with (document.forms.great.select2) { options[options.length] = new Option(_arr, _arr[i + 1]);
     }
     }
     }
     //-->
     </script>
    请看!
      

  12.   


     options[options.length] = new Option(_arr, _arr[i + 1]);这最后一句,我感觉你是新建了一个option吧,好像并没有把东西放到那个select2里
      

  13.   

    不是id,是在上面这段javascript中通过route,然后查询数据库中的内容。
      

  14.   


      var select2 = document.document.getElementById('select2');
      for ( var i = 0; i < _arr.length - 1; i += 2) {
    select2.push("<option value='"+i+"'>"+i+"</option>");//这里你自己添加你的那些属性吧,应该是这样遍历的
      }
      }
      

  15.   

    后台好像只是将查询到的值显示到下拉框中啊。
    那应该是可以遍历到你的option里面啊,你所有数据都读取之后,右键一下,查看源文件,或者是查看页面源代码,然后ctrl+F,搜索一下你的select2,看看是否是有值?
      

  16.   

    后台好像只是将查询到的值显示到下拉框中啊。
    那应该是可以遍历到你的option里面啊,你所有数据都读取之后,右键一下,查看源文件,或者是查看页面源代码,然后ctrl+F,搜索一下你的select2,看看是否是有值?
    没有值啊,不知道是怎么回事。
      

  17.   

    后台好像只是将查询到的值显示到下拉框中啊。
    那应该是可以遍历到你的option里面啊,你所有数据都读取之后,右键一下,查看源文件,或者是查看页面源代码,然后ctrl+F,搜索一下你的select2,看看是否是有值?
    没有值啊,不知道是怎么回事。
    那就是没有弄进去,你后台查询到值了吗?
      

  18.   

    后台好像只是将查询到的值显示到下拉框中啊。
    那应该是可以遍历到你的option里面啊,你所有数据都读取之后,右键一下,查看源文件,或者是查看页面源代码,然后ctrl+F,搜索一下你的select2,看看是否是有值?
    没有值啊,不知道是怎么回事。
    那就是没有弄进去,你后台查询到值了吗?查询到了,点击第一个下拉框,第二个下拉框显示的内容也正确,但不知道怎么获取过来然后进行删除、修改之类的操作。
      

  19.   

    后台好像只是将查询到的值显示到下拉框中啊。
    那应该是可以遍历到你的option里面啊,你所有数据都读取之后,右键一下,查看源文件,或者是查看页面源代码,然后ctrl+F,搜索一下你的select2,看看是否是有值?
    没有值啊,不知道是怎么回事。
    那就是没有弄进去,你后台查询到值了吗?查询到了,点击第一个下拉框,第二个下拉框显示的内容也正确,但不知道怎么获取过来然后进行删除、修改之类的操作。你在遍历的时候,是否给那个select2下的option一个value了?
      

  20.   

    后台好像只是将查询到的值显示到下拉框中啊。
    那应该是可以遍历到你的option里面啊,你所有数据都读取之后,右键一下,查看源文件,或者是查看页面源代码,然后ctrl+F,搜索一下你的select2,看看是否是有值?
    没有值啊,不知道是怎么回事。
    那就是没有弄进去,你后台查询到值了吗?查询到了,点击第一个下拉框,第二个下拉框显示的内容也正确,但不知道怎么获取过来然后进行删除、修改之类的操作。你在遍历的时候,是否给那个select2下的option一个value了?好像是,那如何获取呢?
      

  21.   

    你遍历的时候给你的那个option一个值
      

  22.   

    给你个思路吧,代码我这里还真就没有了
    你查询到select1的时候,遍历到第一个option里,你也是这么用的
    而拿到第二个的时候function getLevel2() {
    var select2 = document.getElementById('select2');
    /**不知道你怎么去后台取值的,我就随便定义一个吧**/
    var results;
      for ( var i = 0; i < results.length; i++) {
            select2.options.add(new Option(results[0].value,results[0].name));//这里的value,和name,你自己看着换···,我没测试
          }
      }}大概就这个意思吧,如果你在弄不出来,我也没办法了
      

  23.   

    很久没搞js了    不过你确定使用onchange="getLevel2()"?换几个试试 onselected或者。。记不清了,找找看。
      

  24.   


    还是没弄出来,算了吧,再找人问,大神,看这个,我同学的,http://bbs.csdn.net/topics/390581309,也是同样的问题。
      

  25.   

    我可不是大神,那边回答的才是,不过你们好像是用的同一种方式?不能改一种,必须那样写?,没给option赋值value的话,后台是拿不到的