JS三级下拉框请教

时间:2022-11-21 19:43:43
请教各位:下面是我在网上找到的一个JS三级下拉框的代码,我就是把数据源改了一下,为何这个运行之后下拉框中不显示内容呢?是没有调用到相应的方法吗?最好能说具体一些是哪里出了问题?谢谢  小女子急用!!!
<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>&nbsp;&nbsp; 
  <SELECT name="ProvinceID" onchange="trendsSelect('ProvinceID',2)"> 
   <OPTION value="-1">请选择</OPTION> 
  </SELECT>&nbsp;&nbsp; 
  <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代码只会以字符串的形式存在。

#2


不把java代码放到里边  
我要如何把源数据放到JS中呢

#3


可以把后台的数据放到hidden变量中,在用JS取就行了。

#4


如果你想获取,先将数据内容放置范围中。
然后通过EL语言获取。
注意:在JS中使用EL的时候要加"";
比如"{requestScope.xxxx}"这样就可以获取到值。

#5


第一个下拉框的数据能出来不?

#6


第一个不能出来  为何?

#7


 为什么不用ajax 

#8


为何不把 数据源放在 数据库中呢?这样读取出来比较快啊 LZ需要的话 我这里有现成的  

#9


  第一个下拉框的数据能出来不?

#10


引用 8 楼 jerry_bj 的回复:
为何不把 数据源放在 数据库中呢?这样读取出来比较快啊 LZ需要的话 我这里有现成的


非常需要   麻烦了   可以发到这上边吗?
谢谢了

#11


学会多利用框架,里面有很多标签,很方便的

#1


你最大的问题就是把java代码表达式放在了JS中运行。
首先你要明白,js是执行在客户端的东西,而java代码是执行在服务器端的。
所以你js中嵌套的java代码只会以字符串的形式存在。

#2


不把java代码放到里边  
我要如何把源数据放到JS中呢

#3


可以把后台的数据放到hidden变量中,在用JS取就行了。

#4


如果你想获取,先将数据内容放置范围中。
然后通过EL语言获取。
注意:在JS中使用EL的时候要加"";
比如"{requestScope.xxxx}"这样就可以获取到值。

#5


第一个下拉框的数据能出来不?

#6


第一个不能出来  为何?

#7


 为什么不用ajax 

#8


为何不把 数据源放在 数据库中呢?这样读取出来比较快啊 LZ需要的话 我这里有现成的  

#9


  第一个下拉框的数据能出来不?

#10


引用 8 楼 jerry_bj 的回复:
为何不把 数据源放在 数据库中呢?这样读取出来比较快啊 LZ需要的话 我这里有现成的


非常需要   麻烦了   可以发到这上边吗?
谢谢了

#11


学会多利用框架,里面有很多标签,很方便的