关于下拉菜单连动问题,寻求高手解决一下.

qdian 2004-01-13 03:11:42
我是jsp初学,看了一些下拉菜单的连动帖子,还有有点不明白怎么回事,麻烦大家帮我解决一下这个问题.

建有表model,其中字段为id(分类序号),level(分类等级),upid(上级分类序号),model(名称).这是一个栏目多级分类的数据表.

我想以下拉菜单连动的方式实现,选择第一个下拉菜单时直接影响到第二个下拉菜单,但是这第二个下拉菜单中的内容upid字段要求是第一个下拉菜单中内容的id,请问这个怎么来实现?谢谢
...全文
62 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qdian 2004-01-14
  • 打赏
  • 举报
回复
<TR>
<TD width=73 height="30"><div align="center">
<B>报价搜索:</B></div></TD>
<TD height="30" colSpan=2>
<SELECT name="select1" CLASS="pt9" onchange="javascript:if(this.selectedIndex!=0) document.forms[0].submit();">
<option value="-1" selected>请选择品牌</option>
<%
connectToDatabase();
ResultSet rs_1 = stmt.executeQuery("select * from car_model where car_level=1");
while( rs_1.next() ) {
int id_1 = rs_1.getInt("id");
String name_1 = rs_1.getString("model");
if( String.valueOf(id_1).equals( request.getParameter("select1") ) )
{
out.println("<option value='" + id_1 + "' selected>" + name_1 + "</option>");
}
else
{
out.println("<option value='" + id_1 + "'>" + name_1 + "</option>");
}
}
rs_1.close();
%>
</option>
</SELECT>
</TD>
<TD height="30">
<select name="select2" CLASS="pt9">
<option value="-1" selected>请选择系列</option>
<%
Statement stmt1 = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs_2 = stmt1.executeQuery("select * from car_model where car_level=2 and car_upid=" + request.getParameter("select1"));
while( rs_2.next() ) {
int id_2 = rs_2.getInt("id");
String name_2 = rs_2.getString("model");
out.println("<option value='" + id_2 + "'>" + name_2 + "</option>");
}
rs_2.close();
stmt1.close();
%>
</select>
</TD>
现在这样写后,可以实现下拉菜单的互动了,但是每次选择品牌就提交了一次表单,并不是选择完所有的内容后才提交,请问一下怎么解决这个问题?

qdian 2004-01-14
  • 打赏
  • 举报
回复
我大概明白互动的原理,但是在调试的时候总是出错误。弄的我心烦意乱,主要是今天下午下班前就要的程序。唉。烦。看过那个省、城市的程序,可是用到自己这里就有问题。唉。
Tianminghui 2004-01-14
  • 打赏
  • 举报
回复
这是不能用的,需要自己做出数据源Collection,CheckitemDelegate.getItemCon(organCode,type);是我自己得到第二级数据的方法,如果你没bean就麻烦了,不过可以自己在jsp页面中查出来在用,不过不推荐使用这种方法
qdian 2004-01-14
  • 打赏
  • 举报
回复
我要疯了,我曾经试了多次了,但是每次都是失败,是不是我太笨了点呀。
Tianminghui 2004-01-14
  • 打赏
  • 举报
回复
<%
String type=request.getParameter("checkType");

if(type==null)
type="A";


java.util.Collection conn=CheckitemDelegate.getItemCon(organCode,type);

pageContext.setAttribute("conn",conn);
%>
<SELECT NAME="checkType" onchange="document.all['self_'].submit();">
<OPTION value="A" <%if(type.equals("A")) out.println("selected");%>>AAA</OPTION>
<OPTION value="B" <%if(type.equals("B")) out.println("selected");%>>BBB</OPTION>
<OPTION value="C" <%if(type.equals("C")) out.println("selected");%>>CCC</OPTION>
</SELECT>


<SELECT NAME="checkItem_id">
<logic:iterate id="ti_con" name="conn">
<option value="<bean:write name="ti_con" property="_id"/>"><bean:write name="ti_con" property="_itemName"/></option>
</logic:iterate>
</SELECT>
</FORM>

这个例子,一级数据是静态的,我使用了二级的数据结合 ,其实一级同以上的二级完全一样,注意数据的封装,一条记录为一个bean,每一级的集合是bean的Collection ,二级的集合是通过一级的id来得到的,通过迭代和bean:write标签即可使用了

momeng2003 2004-01-14
  • 打赏
  • 举报
回复
xuexi...........
jinsfree 2004-01-14
  • 打赏
  • 举报
回复
还是网上找找吧,例子很多的,变通一下就可以用了!
qdian 2004-01-14
  • 打赏
  • 举报
回复
我在线呢,真的很急呀,如果有会的朋友,请帮帮我吧。
qdian 2004-01-14
  • 打赏
  • 举报
回复
建有表model,其中字段为id(自编-分类序号),level(分类等级),upid(上级分类序号),model(名称).这是一个栏目多级分类的数据表.
例如有这样两条数据
id level upid model
1 1 null A
2 2 1 B
意思为B是A的下级分类。
我想以下拉菜单连动的方式实现,选择第一个下拉菜单时直接影响到第二个下拉菜单,但是这第二个下拉菜单中的内容upid字段要求是第一个下拉菜单中内容的id,请问这个怎么来实现?谢谢

我想请大家帮忙写一个程序出来,因为时间紧迫,马上就要上交的。所以只有麻烦大家了。
moroser 2004-01-13
  • 打赏
  • 举报
回复
你可以用第一个下拉菜单的onchang事件,提交个本身页面,第二个菜单的值用request.getParameter("第一个菜单名")即可(第一个菜单的 value="第一个菜单的id")
无爱大叔 2004-01-13
  • 打赏
  • 举报
回复
<%@ page import="java.util.Date,yava.fileapp.*,java.sql.*;"
contentType="text/html;charset=GB2312" pageEncoding="GB2312"
%>
<style>
.f9{ font-size:9pt; }
.bgc{ background-color:#AECAF9; color: #0033FF }
.buttons{font-family:Arial; font-size:13px; font-weight:bold; background-color:#6796E4; color:white; border-top: solid 2px #AACAFB;
border-bottom: solid 1px #4E7DC1;
border-left: solid 1px #AECAF9;
border-right: solid 1px #5679BD;
padding:1px;
margin:0px;}
</style>
<SCRIPT LANGUAGE="JavaScript">
<!--
function rv()
{
var val="";
for(i=0;i<combo_box.list2.length;i++){
val+=","+combo_box.list2[i].value;
}
if(val.charAt(0)==","){
val=val.substr(1,val.length);
}
opener.form1.frecname.value=val;
self.close();
}

//-->
</SCRIPT>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<jsp:useBean id="user" scope="session" class="yava.fileapp.UserBean" />
<%
CDataSource ds=new CDataSource();
java.sql.Connection conn=ds.getConnection();
java.sql.Statement stmt=null;
java.sql.ResultSet rs=null;
CDataCheck dc=new CDataCheck();
%>

<%
String sqlu="SELECT t1.fno, t1.fname, t2.fname AS fdept FROM tuser t1 LEFT OUTER JOIN TDept t2 ON t1.fdept = t2.fno order by t2.fname";
stmt=conn.createStatement();
rs=stmt.executeQuery(sqlu);
%>
<script language='Javascript'>
arr = new Array();
<% int temp=0;
while(rs.next())
{
%>
arr[<%=temp%>]=new Array("<%=rs.getString("fname")%>","<%=rs.getString("fdept")%>");
<%
temp = temp + 1;
}
%>
temp=<%=temp%>;
function ChangeLocation(id){
document.combo_box.city.length=0; //初始化第2级菜单的长度,下标从0开始
var i = 0;
document.combo_box.city.options[0]=new Option('-------','');
for(i=0;i<temp;i++){
if(arr[i][1]==id){//如果相等,证明在第2级里面有输入第1级组织的子集,arr[总数目][部门]
document.combo_box.city.options[document.combo_box.city.length] = new Option(arr[i][0], arr[i][0]);
}
}
}
</script>


<form name="combo_box">
<table border="0" cellspacing="0" cellpadding="0" height="210" width="59">
<tr height="24">
<td bgcolor="#336699" class="buttons" align=center><font color=#ffffff>部门选择</font></td>
<td bgcolor="#336699" class="buttons" align=center><font color=#ffffff>人名选择</font></td>
<td bgcolor="#336699" class="buttons" align=center nowrap><font color=#ffffff>添加/移除</font></td>
<td bgcolor="#336699" class="buttons" align=center><font color=#ffffff>最终人</font></td>
</tr>
<tr>
<td>
<select multiple id=prov name="prov" onchange="ChangeLocation(combo_box.prov.options[combo_box.prov.selectedIndex].text);" style="width:150;height:200" class="bgc">
<option value="0">请选择部门 ---></option>
<%
String sqld="SELECT * FROM tdept";
stmt=conn.createStatement();
rs=stmt.executeQuery(sqld);
while(rs.next())
{
%>
<option name="<%=rs.getString("fno")%>"><%=rs.getString("fname")%></option>
<%
}
%>
</select>
</td>
<td>
<select multiple id=city style="width:150;height:200" class="bgc">
</select>
</td>
<td nowrap align="center" class="bgc">
<input type="button" onClick="move(this.form.list2,this.form.city)" value="<<" class="buttons">
<input type="button" onClick="move(this.form.city,this.form.list2)" value=">>" class="buttons">
</td>
<td>
<select multiple size="10" name="list2" style="width:150;height:200" class="bgc">
</select>
</td>
</tr>
<tr class="bgc">
<td colspan="4" align="center"><input type="button" name="button1" class="buttons" value="选好了!" onclick="rv();"></td>
</tr>
</table>
</form>

<script language="JavaScript">
//人名移动
function move(fbox, tbox) {
var arrFbox = new Array();
var arrTbox = new Array();
var arrLookup = new Array();
var i;
for (i = 0; i < tbox.options.length; i++) {
arrLookup[tbox.options[i].text] = tbox.options[i].value;
arrTbox[i] = tbox.options[i].text;
}
var fLength = 0;
var tLength = arrTbox.length;
for(i = 0; i < fbox.options.length; i++) {
arrLookup[fbox.options[i].text] = fbox.options[i].value;
if (fbox.options[i].selected && fbox.options[i].value != "") {
arrTbox[tLength] = fbox.options[i].text;
tLength++;
}
else {
arrFbox[fLength] = fbox.options[i].text;
fLength++;
}
}
arrFbox.sort();
arrTbox.sort();
fbox.length = 0;
tbox.length = 0;
var c;
for(c = 0; c < arrFbox.length; c++) {
var no = new Option();
no.value = arrLookup[arrFbox[c]];
no.text = arrFbox[c];
fbox[c] = no;
}
for(c = 0; c < arrTbox.length; c++) {
var no = new Option();
no.value = arrLookup[arrTbox[c]];
no.text = arrTbox[c];
tbox[c] = no;
}
}

</script>
</body>
qdian 2004-01-13
  • 打赏
  • 举报
回复
能不能按照我上面提出的内容求一个源程序呢?感激.
filippo1980 2004-01-13
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2551/2551614.xml?temp=.9977228

http://expert.csdn.net/Expert/topic/2358/2358794.xml?temp=.7736475

看看去吧!