ZhangLiHai.Com Blog


给一位网友做一个动态的下拉菜单从数据库读取

张利海 于 2003年05月09日 发表

<%
/**************************
*数据库pTable 省份表:
*id -- pName
*数据库cTable 城市表:
*id -- cName --(int)pID
*id ---pID 关联:
*数据库名:pcData
*
* By Alec Cheung
* http://cheung.cxc.cc
* http://www.andyfans.com/97741/
* msn:eboysit@hotmail.com
*****************************/
%>
<%
/***文件conn.jsp 用于连接数据库*******/
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.sql.*,java.lang.*,java.util.*;"%>
<%
Connection conn=null;
Statement stmt=null,stmtc=null;
ResultSet rs=null,rsc=null;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn=java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/pcData?user=root&password=root&useUnicode=true&characterEncoding=GBK");
stmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
stmtc=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
/*conn.jsp 结束*/
%>
<%/*****文件st.jsp用于显示所有省份名*******/%>
<%@ page contentType="text/html; charset=GBK" %>
<%@ page include="conn.jsp" %>
<%

String sql="select pName from pName order by id desc";
rs=stmt.executeQuery(sql);
out.println("<form name=\"myform\"><select name=\"group\" onChange='change_area(document.myform)'>");
out.println("<option value='javascript:void(0)'>请选择</option>");
while(rs.next()){
out.println("<option value="+rs.getString("pName")+">"+rs.getString("pName")+"</option>");
}
out.println("</select>");
rs.close();
out.println("<select name=\"city\">");
out.println("<option value=\"请选择\">请选择</option>");
out.println("</select><script src=\"changlist.jsp\"></script>"); //注意此处的代码
out.println("<input type=\"button\" value=\" SUB \" onClick=\"alert(city.value);\"></form>");
//文件st.jsp 结束
%>
<%/*****文件changlist.jsp用于显示所有城市名*******/%>
<%@ page contentType="text/html; charset=GBK" %>
<%@ page include="conn.jsp" %>
<%///以下是调用一些脚本文件//%>
function aClass(aData, aValue, aText) {
if (aClass.arguments.length < 3)
alert("传入的参数错误!")
else {
this.Data = aData;
this.Value = aValue;
this.Text = aText;
}
}

function chgDnCombobox(aSrc, aDes, aClass, aRemain){
if (chgDnCombobox.arguments.length < 3)
alert("传入的参数错误!")
else if (aSrc.type != "select-one")
alert("传入的参数错误!")
else if (aClass == null)
alert("aClass未定义错误!")
else {
if (aRemain==null)
aRemain = 1;
chgDnComboboxItem(aSrc.options[aSrc.selectedIndex].value, aDes, aClass, aRemain);
}
}

function chgDnComboboxItem(aValue, aDes, aClass, aRemain){
if (chgDnComboboxItem.arguments.length<3)
alert("参数传入错误!")
else if (aClass==null)
alert("错误!aClass没有定义!")
else{
if (aRemain==null)
aRemain = 1;
deleteAllComboboxItem(aDes, aRemain);
for (var i=0; i<aClass.length; i++)
if (aClass[i].Data==aValue) /* check aClass[i].Data */
if (aClass[i].Data!="")
addComboboxItem(aDes, aClass[i].Text, aClass[i].Value);
}
}

function deleteAllComboboxItem(aList, aRemain) {
for (var i=aList.options.length; i > aRemain-1; i--)
aList.options[i] = null;
}

function addComboboxItem(aList, aText, aValue) {
var aOption = new Option(aText, aValue);
eval("aList.options[aList.options.length]=aOption");
}

//数据区,可以在这里添加数据
function change_area(aForm) {
chgDnCombobox(aForm.group, aForm.city, f_Set0 , 0);
}

function onchg(aForm)


var f_Set0 = new Array(
<%
//脚本结束开始读取数据库
String sql="select cName,pID from cTable order by id desc";
rs=stmt.executeQuery(sql);
while(rs.next()){
String sqlc = "select pName from pTable where id ="+rs.getInt("pID"); //注意此处外循环 先选环省份 是因为没个省份至少有一个城市
rsc = stmtc.executeQuery(sqlc);
while(rsc.next()){
out.println("new aClass('"+rsc.getString("pName")+"','"+rs.getString("cName")+"','"+rs.getString("cName")+"'),");
}
rsc.close();
}
rs.close();
%>
new aClass("End", "End", "End"));
<%
/*changlist.jsp 结束
*
* 以上程序没有问题,你可以到我的网站上看看。
*
* 至于用ArrayList or Hashtable 我还没想到。
*
*这样可能不是最好的程序但是可以实现你的要求
*/%>

新版本Blog中有更多内容
Copyright (C)2002-2007 All Rights Reserved Powered By:ZhangLiHai.Com