原javascript代码:
一级分类:
二级分类:
----------------------------------------------------
数据库中大类:bigclass:pid,pName
小类:smallclass:psid,pscName,pid
我的思路是:从数据库中取出大类与小类的值,填充在javascript里,这样只须读取一次数据,剩下的事就交给js去处理了.
定义两个ResultSet 对象rssml rsbig.上面JS代码更改后,
<% while(rsbig.next())
{%>
<%} %>
发现速度确实快了,不过有个缺点就是但查看源代码时,很容易发现你数据库字段的一些对应值.
JavaScript对下拉菜单的基本操作:
1.获取一个下拉菜单对象
Js代码
1. var select = document.getElementByIdx_x("selectid");
var select = document.getElementByIdx_x("selectid");
2.在下拉菜单中添加一个选项
Js代码
1. var option = new Option("value","text");//第一项为值,第二项为文本域
var option = new Option("value","text");//第一项为值,第二项为文本域
3.把选项加入到下拉菜单中
Js代码
1. select.options.add(option);
select.options.add(option);
4.获取被选择的选项的索引
Js代码
1. var index = select.selectedIndex;
var index = select.selectedIndex;
5.获得某个选项的文本域
Js代码
1. var text = select.options[index].text;
var text = select.options[index].text;
6.获得某个选项的值域
Js代码
1. var value = select.options[index].value;
var value = select.options[index].value;
7.获得选中的值
Js代码
1. var value = select.vlaue;
var value = select.vlaue;
以下为实现下拉菜单联动的jsp上的代码
Js代码
1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
2.
3.
4.
5.
6.
7. //这里jsp调用了bean用来从数据库读出用户需要的内容,并已string类型
8. //放在list中
9. <% Type type = new Type(1); List select1 = traintype.getSelectFirst();
10. List select2 = traintype.getSelectSecond();%>
11.
<%=count %>
一级分类
选择二级分类
这两天接到一个项目,要求是这样的;
菜单只有二级,但是菜单的内容全部是放在mysql数据库的一个菜单中,
字段如下
id menu1 menu2
1 k1 hhh
2 k5 dddd
3 bc dddl
4 k5 lldkd
那么我们首先要取的是一级菜单,k1,k5,bc 有重复的就必须得去掉,
如果采用普通的校验方法,机器肯定要搞死
下面是一级菜单
<%
String str="select *,count(distinct menu1) from menu1 group by menu1";
ResultSet rs=connbean.executeQuery(str);//connbean是一个javabean,如果不会请不要问我,请去看看书。
while(rs.next()){
out.println("");
}
%>
//OK 一级菜单出来了
再看看二级菜单怎么做;大家都知道js是在客户端上运行的,而jsp是在服务器上运行的,如果要将js的参数传递到jsp页面上运行,一般采用浏览器传递,一个菜单是通过浏览器来传递,那么就不友好了。
现在我们再说说怎么调用二级菜单。
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
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
{
ii = i+1;
type2.options[ii] = new Option();
type2.options[ii].text = type2s[t1][i];
type2.options[ii].value = type2s[t1][i];
}
}
class(一级栏目信息):classId(自动编号),className(栏目名称), Nclass(二级栏目信息), NclassId(自动编号),NclassName(栏目名称),parentId(一级栏目id,与class表中的classId关联)
<%@ page contentType=text/html; charset=GB2312 language=java errorPage=../error.jsp %>
<%@ include file=../conn.jsp%>
<%@ include file=../ds.jsp%>
<%@ taglib uri=http://java.sun.com/jsp/jstl/sql divfix=sql %>
<%request.setCharacterEncoding(gb2312); %>
<%String sql=select * from Nclass order by NclassId asc;
ResultSet rs=stmt.executeQuery(sql);
%>
var onecount;
onecount=0;
subcat = new Array();
<%
int count = 0;
while(rs.next()){
%>
subcat[<%=count%>] = new Array(<%=rs.getString(NclassName)%>,
<%=rs.getString(NclassId)%>,<%=rs.getString(parentId)%>);
<%
count++;
}
rs.close();
%>
onecount=<%=count%>;
function changelocation(locationid)
{
document.myform.NclassId.length = 0;
var locationid=locationid;
var i;
for (i=0;i < onecount; i++)
{
if (subcat[i][2] == locationid)
{
document.myform.NclassId.options[document.myform.NclassId.length] = new
Option(subcat[i][0], subcat[i][1]);
}
}
}
[document.myform.classId.selectedIndex].value) size=1>
SELECT * FROM class
一级分类
选择二级分类