`
lijun87
  • 浏览: 268359 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

动态无刷新级联下拉框(无级限制)[转载]

阅读更多
   前几天做级联下拉框,网上搜索了一下,挺多的,静态的居多,动态的也有,但遗憾的是没有找到我需要的。后来我自己写了一个脚本,实现了从数据库中取出数据,形成动态的下拉框, 可以是无限级(因为实现方法是把页面的下拉框名称当作参数传递,因为同一页面相同名称的控件是不存在的,因此可以实现),当然这些可能无意义,现在就看三级下拉框。无刷新,是因为页面加载时把数据全部加载到了页面中;实现动态级联,是因为下级菜单与上级有某种关联(这是肯定的)。下面就说说其具体实现。

脚本部分
<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>



引用脚本页面的部分代码
<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>
<%  
//数据库传值,也可以是结果集,根据实际情况使用
ArrayList alCountry=(ArrayList)request.getAttribute("lCountry");
ArrayList alProvince=(ArrayList)request.getAttribute("lProvince");
ArrayList alCity=(ArrayList)request.getAttribute("lCity");
for(int i=0;i<alCountry.size();i++)
{
  //这里作者使用数据表对象
  TCountry tCountry=(TCountry)alCountry.get(i);
  int j=2*i;//间隔为2
%>
<SCRIPT LANGUAGE="JavaScript">
   //2的倍数存放ID,是下拉框的VALUE值,同时供下一级下拉框使用
   CountryID[<%=j%>]=["<%=tCountry.getCountryid()%>"];            
   CountryID[<%=j+1%>]=["<%=tCountry.getCountryname()%>"];
</SCRIPT>
<%}
for(int i=0;i<alProvince.size();i++)
{
  TProvince tProvince=(TProvince)alProvince.get(i);
  int j=3*i;//间隔为3
%>
<SCRIPT LANGUAGE="JavaScript"> 
   //3的倍数存放ID,是下拉框的VALUE值,同时供下一级下拉框使用
   //3的倍数+2  存放上一级ID,供下拉框匹配上一级使用
   ProvinceID[<%=j%>]=["<%=tProvince.getProvinceid()%>"];
   ProvinceID[<%=j+1%>]=["<%=tProvince.getProvincename()%>"];
   ProvinceID[<%=j+2%>]=["<%=tProvince.getParentid()%>"]; 
</SCRIPT>
<%}
for(int i=0;i<alCity.size();i++)
{
  TCity tCity=(TCity)alCity.get(i);
  int j=3*i;//间隔为3
%>
<SCRIPT LANGUAGE="JavaScript"> 
   //3的倍数存放ID,是下拉框的VALUE值,同时供下一级下拉框使用
   //3的倍数+2  存放上一级ID,供下拉框匹配上一级使用
   CityID[<%=j%>]=["<%=tCity.getCityid()%>"];
   CityID[<%=j+1%>]=["<%=tCity.getCityname()%>"];
   CityID[<%=j+2%>]=["<%=tCity.getProvinceid()%>"]; 
</SCRIPT>
<%}%>


<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>

<SCRIPT LANGUAGE="JavaScript"> 
<!--
//初始化一级下拉框,其中参数为要初始化级联下拉框的组数,如果有两组,则为2
init(1);
//-->
</SCRIPT>


就说这么多,希望对你有用,也希望提出你的意见。
from:http://blog.csdn.net/opossum/archive/2006/09/21/1261460.aspx
分享到:
评论
2 楼 gaozhonghui 2008-08-28  
 
1 楼 gaozhonghui 2008-08-28  

相关推荐

    ajax实现可配置无刷新级联下拉框

    **Ajax 实现可配置无刷新级联下拉框** 在 Web 开发中,为了提供用户友好的交互体验,级联下拉框(Cascading Dropdown)是一个常见的需求。级联下拉框允许用户在一个下拉框中选择一个选项后,根据所选的选项动态更新...

    省市地区 局部刷新 级联下拉框

    在ASP.Net开发中,"省市地区 局部刷新 级联下拉框"是一个常见的需求,它涉及到前端用户界面的交互以及后端数据的动态加载。局部刷新技术可以提高用户体验,因为它仅更新页面的特定部分,而不是整个页面,这在处理...

    好用简单的可编辑级联下拉框

    "好用简单的可编辑级联下拉框"就是一个旨在提升用户体验的组件,它将传统的静态下拉框与级联选择功能相结合,并引入了编辑能力,使得用户在选择过程中能够更加灵活和高效。 首先,我们要理解什么是“可编辑下拉框”...

    级联下拉框效果 jquery

    级联下拉框(Cascading Dropdown)是一种常见的前端交互设计,它允许用户在选择一个选项后,根据所选选项动态加载并显示下一个下拉框的内容。这种效果在多级分类、地区选择、产品配置等场景中十分常见。在本教程中,...

    超简单的级联下拉框例子

    总的来说,这个“超简单的级联下拉框例子”展示了如何在不使用数组的情况下,通过动态DOM操作和简洁的代码实现级联下拉框功能。这样的实现方式有利于代码的可读性和维护性,同时也提供了良好的用户体验。通过深入...

    excel 级联下拉框用法

    在本教程中,我们将深入探讨如何在Excel中创建级联下拉框,并通过提供的`excle动态级联.xls`示例文件来理解其实现方法。 1. **什么是级联下拉框** 级联下拉框是由两个或多个相互关联的下拉列表组成,当用户在第一...

    动态级联下拉框构件

    动态级联下拉框构件是一种常见的前端交互组件,主要用于实现多级联动选择的效果。在网页设计中,这种组件常用于地址选择、分类筛选等场景,用户在选择一级选项后,二级甚至多级相关的下拉框内容会随之更新,提供更...

    数据库动态级联下拉框

    asp读取access数据库数据,在html页面动态生成多级级联的下拉框,摆脱静态级联下拉框数据变更烦恼。

    Android城市级联下拉框(自定义Spinner)

    在Android开发中,有时...总之,实现Android城市级联下拉框(自定义Spinner)需要对Spinner的基本使用、事件监听、数据更新以及界面定制有深入了解。通过不断实践和优化,我们可以创建出用户体验优秀的级联选择组件。

    ajax+servlet两级动态级联下拉框

    总的来说,“ajax + servlet 两级动态级联下拉框”项目展示了Web开发中动态交互的一个基本示例,通过结合AJAX和Servlet的优势,为用户提供流畅的、无刷新的交互体验。理解和掌握这个项目有助于提升对前后端交互、...

    layui-级联下拉框-可配置开启多选-HTML源码

    级联下拉框是一种常见的UI组件,它允许用户在一个下拉框的选择基础上动态加载并显示另一个相关的下拉框,这种联动效果在数据筛选、地区选择等场景中非常常见。 1. HTML基础: HTML(HyperText Markup Language)...

    省份-市-区及镇街道级联下拉框加载

    内部为四级的级联下拉框,分别为省份,市,县及区和镇及街道四级下拉框;(适用任何语言的纯HTML)详细截图可访问:https://blog.csdn.net/weixin_43972758/article/details/86510419 进行查询。

    仿美团网团购搜索级联下拉框DEMO

    本DEMO——“仿美团网团购搜索级联下拉框”专注于提供一个类似美团网的多级选择搜索功能,这在Android应用开发中是一项常见的需求。这个DEMO通过实现级联下拉框,为用户提供了更高效、更直观的筛选和查找服务。 1. ...

    AJAX级联下拉框源码

    AJAX级联下拉框是一种常见的前端交互设计,它利用Ajax技术实现在用户选择一个下拉选项时,动态地更新另一个相关联的下拉框内容。这种功能在数据关联、筛选和表单填写中非常常见,例如省份和城市的选择,类别和子类别...

    jQuery实现级联下拉框实战(5)

    级联下拉框允许用户在一个下拉框中做出选择后,根据所选内容动态更新下一个下拉框的选项。这种功能提高了用户体验,使得数据筛选更加直观和便捷。 首先,我们需要创建HTML结构。在提供的代码清单1.1中,可以看到一...

    使用jquery写的级联下拉框

    使用jquery写的级联下拉框,使用jquery写的级联下拉框

    用Struts+hibernate+SQLServer2000写的级联下拉框程序

    总结起来,这个项目展示了如何结合Struts的控制层、Hibernate的数据持久化层以及SQLServer2000的数据库服务,实现一个动态的、基于用户选择的级联下拉框功能。对于学习Java Web开发和实践MVC架构的人来说,这是一个...

    无限极级联下拉框的封装

    在网页开发中,级联下拉框(Cascading Dropdown)是一种常见的交互设计,它用于在两个或更多下拉框之间建立关联,当用户在一个下拉框中选择一个选项时,其他下拉框的选项会根据所选内容动态更新。在本案例中,我们将...

    级联下拉框(支持火狐和IE)

    级联下拉框是一种常见的用户界面元素,常用于在网页或应用程序中提供多级选择功能。在.NET框架中,实现这种交互通常涉及到HTML、CSS、JavaScript(如jQuery)以及服务器端的技术,例如ASP.NET。本示例可能是一个...

    Ext combo 下拉框级联

    在IT领域,级联下拉框(Cascading Dropdown)是一种常见的用户界面设计,它用于在两个或更多下拉框之间建立关联关系。在这种设计中,一个下拉框的选项会根据用户在另一个下拉框中的选择动态更新。这种功能在数据筛选...

Global site tag (gtag.js) - Google Analytics