这两天接到一个项目,要求是这样的;
菜单只有二级,但是菜单的内容全部是放在mysql数据库的一个菜单中,
字段如下
id menu1 menu2
1 k1 hhh
2 k5 dddd
3 bc dddl
4 k5 lldkd
那么我们首先要取的是一级菜单,k1,k5,bc 有重复的就必须得去掉,
如果采用普通的校验方法,机器肯定要搞死
下面是一级菜单
<select name="menu1" id="menu1" οnchange="choosemenu2(this, document.getElementById(menu2))">
<option value="n">请选择</option>
<%
String str="select *,count(distinct menu1) from menu1 group by menu1";
ResultSet rs=connbean.executeQuery(str);//connbean是一个javabean,如果不会请不要问我,请去看看书。
while(rs.next()){
out.println("<option value='"+rs.getString("menu1")+"'>"+ rs.getString("menu1")+"</option>");
}
%>
</select>
<select name="menu2" id="menu2">
<option value="n">请选择</option>
</select>
//OK 一级菜单出来了
再看看二级菜单怎么做;大家都知道js是在客户端上运行的,而jsp是在服务器上运行的,如果要将js的参数传递到jsp页面上运行,一般采用浏览器传递,一个菜单是通过浏览器来传递,那么就不友好了。
现在我们再说说怎么调用二级菜单。
<script language = "JavaScript">
type2s=new Object();
<%
String str1="select *,count(distinct menu1) from classify group by menu1";
ResultSet rs1=connbean.executeQuery(str1);
while(rs1.next()){
str1="select*from classify where menu1='"+rs1.getString("menu1")+"'";
ResultSet rs2=connbean.executeQuery(str1);
if(rs2.next()){
rs2.last();
int rowcount=rs2.getRow();
String sz="type2s['"+rs1.getString("menu1")+"']=new Array(";
for(int k=1;k<=rowcount;k++){
rs2.absolute(k);
if(k<rowcount){
sz+="'"+rs2.getString("menu2")+"',";
}else {
sz+="'"+rs2.getString("menu2")+"');";
}
}
out.println(sz);
}
}
%>
function choosetype2(type1,type2){
var t1,t2;
var i,ii;
t1=type1.value;
t2=type2.value;
type2.length=1;
if(t1=='0') return;
if(typeof(type2s[t1])=='undefined') return;
for(i=0; i<type2s[t1].length; i++)
{
ii = i+1;
type2.options[ii] = new Option();
type2.options[ii].text = type2s[t1][i];
type2.options[ii].value = type2s[t1][i];
}
}
</script>