<script type="text/javascript">
<!--
//selectName为二维数组,其中存放的是要各级下拉框的名字
//第一组级联下拉框selectName[0],第二组级联下拉框selectName[1]
var selectName=new Array();
selectName[0]=new Array("CountryID","ProvinceID","CityID");
//必选下拉框数组,如果“ProvinceID”,也为必选,
//则var isNull=new Array("CountryID","ProvinceID");
var isNull=new Array("CountryID");
//定义存放数据库中各级下拉框中的内容的数组
var CountryID=new Array();
var ProvinceID=new Array();
var CityID=new Array();
//-->
</script>
<%
//数据库传值,也可以是结果集,根据实际情况使用
String sql1 = "select * from Brand";
ResultSet rs1 = null;
rs1=db.select(sql1);
int i=0;
while(rs1.next()){
int j=2*i;//间隔为2
%>
<SCRIPT LANGUAGE="JavaScript">
//2的倍数存放ID,是下拉框的VALUE值,同时供下一级下拉框使用
CountryID[<%=j%>]=["<%=rs1.getInt("id")%>"];
CountryID[<%=j+1%>]=["<%=rs1.getString("brand")%>"];
</SCRIPT>
<%i++;}
rs1.close();
String sql2 = "select * from Series";
ResultSet rs2 = null;
i=0;
rs2=db.select(sql2);
while(rs2.next()){
int j=3*i;//间隔为3
out.println(rs2.getInt("id"));
%>
<SCRIPT LANGUAGE="JavaScript">
//3的倍数存放ID,是下拉框的VALUE值,同时供下一级下拉框使用
//3的倍数+2 存放上一级ID,供下拉框匹配上一级使用
ProvinceID[<%=j%>]=["<%=rs2.getInt("id")%>"];
ProvinceID[<%=j+1%>]=["<%=rs2.getString("series")%>"];
ProvinceID[<%=j+2%>]=["<%=rs2.getString("brandid")%>"];
</SCRIPT>
<%i++;}
rs2.close();
String sql3 = "select * from Levels";
ResultSet rs3 = null;
i=0;
rs3=db.select(sql3);
while(rs3.next()){
int j=3*i;//间隔为3
out.println(rs3.getString(3));
%>
<SCRIPT LANGUAGE="JavaScript">
//3的倍数存放ID,是下拉框的VALUE值,同时供下一级下拉框使用
//3的倍数+2 存放上一级ID,供下拉框匹配上一级使用
CityID[<%=j%>]=["<%=rs3.getInt("id")%>"];
CityID[<%=j+1%>]=["<%=rs3.getString("level")%>"];
CityID[<%=j+2%>]=["<%=rs3.getString("seriesid")%>"];
</SCRIPT>
<%i++;}
rs3.close();
%>
<script type="text/javascript">
<!--
//初始化一级下拉框,iSelect为要初始化级联下拉框的组数,如果只有一组,则为1
function init(iSelect)
{
var i;
var j;
for(i=0;i<iSelect;i=i+1)
{
//selectName为二维数组,其中selectName[i][0]存放的是要初始化的一级下拉框的名字
with(eval("this.document.forms[0]."+selectName[i][0]))
{
for(j=0;j<eval(selectName[i][0]+".length");j=j+2)
{
var oOption = document.createElement("OPTION");
oOption.value=eval(selectName[i][0]+"[j]");
oOption.text=eval(selectName[i][0]+"[j+1]");
options.add(oOption);
}
}
}
}
//动态关联各级下拉框,boxName下拉框的名字,num下拉框的级别,
//比如国家,省,城市三级,则与省对应 trendsSelect(ProvinceName,2)
function trendsSelect(boxName,num)
{
var i;
var length;
var j;
var arrTemp;
//selectName[i][num-1]存放的是“i”组菜单的“num”级下拉框的名字
for(i=0;i<selectName.length;i=i+1)
{
//确定为第几组下拉框
if(boxName==selectName[i][num-1])
{
with(eval("this.document.forms[0]."+selectName[i][num-1]))
{
arrTemp=options[options.selectedIndex].value;
}
if(num<selectName[i].length)
{
with(eval("document.forms[0]."+selectName[i][num]))
{
length=0;
//首先给下一级下拉框赋初始值
var oOption = document.createElement("OPTION");
oOption.value="-1";
oOption.text="请选择";
options.add(oOption);
for(j=0;j<eval(selectName[i][num]+".length");j=j+3)
{
if(arrTemp==eval(selectName[i][num]+"[j+2]"))
{
var oOption = document.createElement("OPTION");
oOption.value=eval(selectName[i][num]+"[j]");
oOption.text=eval(selectName[i][num]+"[j+1]");
options.add(oOption);
}
}
}
}
var boxName=selectName[i][num];
//递归调用
trendsSelect(boxName,num+1);
}
}
}
//响应FORM中onreset事件;
function rt(iSelect)
{
var i;
for(i=0;i<iSelect;i=i+1)
{
for(j=1;j<selectName[i].length;j=j+1)
{
with(eval("document.forms[0]."+Sel[i][j]))
{
length=0;
var oOption = document.createElement("OPTION");
oOption.value="-1";
oOption.text="请选择";
options.add(oOption);
}
}
}
}
//判断必选下拉框是否已经选择,如不需要可以不调用,isNull[i]存放的是下拉框的名字
function isNullWithBox()
{
var i;
for(i=0;i<isNull.length;i=i+1)
{
var boxTemp = eval("document.forms[0]." + isNull[i]).value;
if(boxTemp=="-1")
{
alert("此下拉框必选");
eval("document.forms[0]." + isNull[i]).focus();
return false;
}
}
return true;
}
//-->
</script>
<form action="" name="form1">
<table>
<tr>
<TD align="right">请选择所在地区</TD>
<TD>
<SELECT name="CountryID" onchange="trendsSelect('CountryID',1)" >
<OPTION value="-1">请选择</OPTION>
</SELECT>
<SELECT name="ProvinceID" onchange="trendsSelect('ProvinceID',2)">
<OPTION value="-1">请选择</OPTION>
</SELECT>
<SELECT name="CityID">
<OPTION value="-1">请选择</OPTION>
</SELECT>
</TD>
</tr>
</table>
</form>
<SCRIPT LANGUAGE="JavaScript">
<!--
//初始化一级下拉框,其中参数为要初始化级联下拉框的组数,如果有两组,则为2
init(1);
//-->
</SCRIPT>
11 个解决方案
#1
你最大的问题就是把java代码表达式放在了JS中运行。
首先你要明白,js是执行在客户端的东西,而java代码是执行在服务器端的。
所以你js中嵌套的java代码只会以字符串的形式存在。
首先你要明白,js是执行在客户端的东西,而java代码是执行在服务器端的。
所以你js中嵌套的java代码只会以字符串的形式存在。
#2
不把java代码放到里边
我要如何把源数据放到JS中呢
我要如何把源数据放到JS中呢
#3
可以把后台的数据放到hidden变量中,在用JS取就行了。
#4
如果你想获取,先将数据内容放置范围中。
然后通过EL语言获取。
注意:在JS中使用EL的时候要加"";
比如"{requestScope.xxxx}"这样就可以获取到值。
然后通过EL语言获取。
注意:在JS中使用EL的时候要加"";
比如"{requestScope.xxxx}"这样就可以获取到值。
#5
第一个下拉框的数据能出来不?
#6
第一个不能出来 为何?
#7
为什么不用ajax
#8
为何不把 数据源放在 数据库中呢?这样读取出来比较快啊 LZ需要的话 我这里有现成的
#9
第一个下拉框的数据能出来不?
#10
非常需要 麻烦了 可以发到这上边吗?
谢谢了
#11
学会多利用框架,里面有很多标签,很方便的
#1
你最大的问题就是把java代码表达式放在了JS中运行。
首先你要明白,js是执行在客户端的东西,而java代码是执行在服务器端的。
所以你js中嵌套的java代码只会以字符串的形式存在。
首先你要明白,js是执行在客户端的东西,而java代码是执行在服务器端的。
所以你js中嵌套的java代码只会以字符串的形式存在。
#2
不把java代码放到里边
我要如何把源数据放到JS中呢
我要如何把源数据放到JS中呢
#3
可以把后台的数据放到hidden变量中,在用JS取就行了。
#4
如果你想获取,先将数据内容放置范围中。
然后通过EL语言获取。
注意:在JS中使用EL的时候要加"";
比如"{requestScope.xxxx}"这样就可以获取到值。
然后通过EL语言获取。
注意:在JS中使用EL的时候要加"";
比如"{requestScope.xxxx}"这样就可以获取到值。
#5
第一个下拉框的数据能出来不?
#6
第一个不能出来 为何?
#7
为什么不用ajax
#8
为何不把 数据源放在 数据库中呢?这样读取出来比较快啊 LZ需要的话 我这里有现成的
#9
第一个下拉框的数据能出来不?
#10
非常需要 麻烦了 可以发到这上边吗?
谢谢了
#11
学会多利用框架,里面有很多标签,很方便的