三种省市级联下拉列表的写法

一般我们如果实现省市级联效果,思路大致都如下:

 

1、利用省份下拉框的选项改变事件onChange

2、根据用户选择的省份,动态添加城市下拉框的值


第一种方式,也是最原始的方式
Html代码
  1. <SPAN style="FONT-SIZE: large"><HTML>  
  2. <HEAD>  
  3. <META http-equiv="Content-Type" content="text/html; charset=gb2312">  
  4. <TITLE>注册</TITLE>  
  5. <SCRIPT language="JavaScript" >  
  6.   function changeCity( ){   
  7.       //获取用户选择的省份   
  8.      var province=document.myform.selProvince.value;    
  9.      var newOption1,newOption2;   
  10.      switch(province){   
  11.          //根据用户选择的省份动态创建城市下拉列表   
  12.        case  "四川省" :   
  13.             newnewOption1= new Option("成都市","chengdu");   
  14.             newnewOption2= new Option("泸州市","luzhou");   
  15.             break;   
  16.        case "湖北省" :    
  17.             newnewOption1= new Option("武汉市","wuhan");   
  18.             newnewOption2= new Option("襄樊市","xiangfan");   
  19.             break;   
  20.        case "山东省" :    
  21.            newnewOption1= new Option("青岛市","qingdao");   
  22.            newnewOption2= new Option("烟台市","yantai");   
  23.             break;              
  24.       }   
  25.       //清除原有选项   
  26.      document.myform.selCity.options.length=0;   
  27.      //将选项添加到选项数组   
  28.      document.myform.selCity.options.add(newOption1);   
  29.      document.myform.selCity.options.add(newOption2);   
  30.   }   
  31. </SCRIPT>  
  32.  </HEAD>  
  33.   
  34. <BODY>  
  35. <FORM name="myform"  action="register_success.htm"  >  
  36. <TABLE width="472" border="0" align="center" cellpadding="0" cellspacing="0">  
  37.   <TR>  
  38.     <TD align="center">省份 </TD>  
  39.     <!--当用户选择不同省份时,将调用函数,改变城市下拉列表值-->  
  40.     <TD><SELECT name="selProvince" onChange="changeCity( )">  
  41.       <OPTION>--请选择开户帐号的省份--</OPTION>  
  42.       <OPTION value="四川省">四川省</OPTION>  
  43.       <OPTION value="山东省">山东省</OPTION>  
  44.       <OPTION value="湖北省">湖北省</OPTION>  
  45.        </SELECT></TD>  
  46.   </TR>  
  47.   <TR>  
  48.     <TD align="center" valign="bottom"> 城市 </TD>  
  49.     <TD><P>  
  50.       <SELECT name="selCity">  
  51.         <OPTION>--请选择开户帐号的城市--</OPTION>  
  52.       </SELECT>  
  53.         </P>  
  54.       </TD>  
  55.   </TR>  
  56.     
  57.   </TR>  
  58. </TABLE>  
  59. </FORM>  
  60. </BODY>  
  61. </HTML></SPAN>  
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>注册</TITLE>
<SCRIPT language="JavaScript" >
  function changeCity( ){
	  //获取用户选择的省份
     var province=document.myform.selProvince.value; 
	 var newOption1,newOption2;
     switch(province){
		 //根据用户选择的省份动态创建城市下拉列表
	   case  "四川省" :
		    newOption1= new Option("成都市","chengdu");
			newOption2= new Option("泸州市","luzhou");
			break;
	   case "湖北省" : 
		    newOption1= new Option("武汉市","wuhan");
			newOption2= new Option("襄樊市","xiangfan");
			break;
	   case "山东省" : 
		   newOption1= new Option("青岛市","qingdao");
		   newOption2= new Option("烟台市","yantai");
			break;	 		 
	  }
	  //清除原有选项
	 document.myform.selCity.options.length=0;
	 //将选项添加到选项数组
	 document.myform.selCity.options.add(newOption1);
	 document.myform.selCity.options.add(newOption2);
  }
</SCRIPT>
 </HEAD>

<BODY>
<FORM name="myform"  action="register_success.htm"  >
<TABLE width="472" border="0" align="center" cellpadding="0" cellspacing="0">
  <TR>
    <TD align="center">省份 </TD>
    <!--当用户选择不同省份时,将调用函数,改变城市下拉列表值-->
    <TD><SELECT name="selProvince" onChange="changeCity( )">
      <OPTION>--请选择开户帐号的省份--</OPTION>
      <OPTION value="四川省">四川省</OPTION>
      <OPTION value="山东省">山东省</OPTION>
      <OPTION value="湖北省">湖北省</OPTION>
       </SELECT></TD>
  </TR>
  <TR>
    <TD align="center" valign="bottom"> 城市 </TD>
    <TD><P>
      <SELECT name="selCity">
        <OPTION>--请选择开户帐号的城市--</OPTION>
      </SELECT>
        </P>
      </TD>
  </TR>
 
  </TR>
</TABLE>
</FORM>
</BODY>
</HTML>
如果有很多城市,就需要定义很多变量,编写很多重复的代码.使用数组优化省市级联功能 

第二方式,通过数组的方式
Js代码
  1. <SPAN style="FONT-SIZE: large"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
  2. "http://www.w3.org/TR/html4/loose.dtd">   
  3. <HTML>   
  4. <HEAD>   
  5. <META http-equiv="Content-Type" content="text/html; charset=gb2312">   
  6. <TITLE>注册</TITLE>   
  7. <SCRIPT language="JavaScript" >   
  8.    function changeCity( )   
  9.   {   
  10.         
  11.      //创建数组,可以不指定大小    
  12.      var cityList = new Array( );   
  13.      //为数组赋值。每个单元格可以是数组。JavaScript不支持二维数组    
  14.      cityList[0]=['成都''绵阳''德阳''自贡''内江''乐山''南充''雅安''眉山''甘孜''凉山''泸州'];   
  15.      cityList[1]=['济南''青岛''淄博''枣庄''东营''烟台''潍坊''济宁''泰安''威海''日照'];   
  16.      cityList[2] = ['武汉''宜昌''荆州''襄樊''黄石''荆门''黄冈''十堰''恩施''潜江'];   
  17.      //获得省份选项的索引号,如四川省为1,比对应数组索引号多1[这么说的原因是升级下拉列表第一项是'请选择省份'也占一个索引位置]   
  18.      var pIndex=document.myform.selProvince.selectedIndex-1;    
  19.      var newOption1;   
  20.      document.myform.selCity.options.length=0;   
  21.      for (var j in cityList[pIndex])    
  22.      {   
  23.          newOption1=new Option(cityList[pIndex][j], cityList[pIndex][j]);    
  24.          document.myform.selCity.options.add(newOption1);   
  25.      }   
  26.   }   
  27.      
  28. </SCRIPT>   
  29.   
  30.  </HEAD>   
  31.   
  32. <BODY>   
  33. <FORM name="myform" id="myform" action="register_success.htm" onSubmit="return checkForm( )">   
  34. <TABLE width="472" border="0" align="center" cellpadding="0" cellspacing="0">   
  35.   
  36.   <TR>   
  37.     <TD align="center">省份 </TD>   
  38.     <TD><SELECT name="selProvince" id="selProvince" onChange="changeCity( )">   
  39.       <OPTION>--请选择开户帐号的省份--</OPTION>   
  40.       <OPTION value="四川省">四川省</OPTION>   
  41.       <OPTION value="山东省">山东省</OPTION>   
  42.       <OPTION value="湖北省">湖北省</OPTION>   
  43.     </SELECT></TD>   
  44.   </TR>   
  45.   <TR>   
  46.     <TD><DIV align="center">城市</DIV></TD>   
  47.     <TD><SELECT name="selCity" id="selCity" onChange="myfun1( )">   
  48.       <OPTION>--请选择开户帐号的城市--</OPTION>   
  49.        </SELECT></TD>   
  50.   </TR>   
  51.   
  52. </TABLE>   
  53. </FORM>   
  54. </BODY>   
  55. </HTML></SPAN>  
 第三种方式,可以通过数组标识方式,也就是使用文字下标的数组再次优化
Html代码
  1. <SPAN style="FONT-SIZE: large"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   
  2. "http://www.w3.org/TR/html4/loose.dtd">  
  3. <HTML>  
  4. <HEAD>  
  5. <META http-equiv="Content-Type" content="text/html; charset=gb2312">  
  6. <TITLE>注册</TITLE>  
  7. <SCRIPT language="JavaScript" >  
  8.   function changeCity( )   
  9.   {   
  10.         
  11.      //JavaScript中的数组下标可以采用标识符代替。   
  12.      //可以根据用户选择的value值,与数组下标标识 进行比较,从而找出该省包括的城市。   
  13.   
  14.      var province=document.myform.selProvince.value;    
  15.      var cityList = new Array( );   
  16.      //数组下标采用文字标识符代替   
  17.      cityList['山东省'] = ['济南', '青岛', '淄博', '枣庄', '东营', '烟台', '潍坊', '济宁', '泰安', '威海', '日照'];   
  18.      cityList['四川省'] =['成都', '绵阳', '德阳', '自贡', '内江', '乐山', '南充', '雅安', '眉山', '甘孜', '凉山', '泸州'];   
  19.      cityList['湖北省'] = ['武汉', '宜昌', '荆州', '襄樊', '黄石', '荆门', '黄冈', '十堰', '恩施', '潜江'];   
  20.         
  21.      document.myform.selCity.options.length=0;   
  22.     //根据省份下拉框的值,获取对应数组的索引标识   
  23.      var pIndex=document.myform.selProvince.value;    
  24.      var newOption1;   
  25.      document.myform.selCity.options.length=0;   
  26.      //数组的读取和数字索引方式相同   
  27.      for (var j in cityList[pIndex])    
  28.      {   
  29.          newnewOption1=new Option(cityList[pIndex][j], cityList[pIndex][j]);    
  30.          document.myform.selCity.options.add(newOption1);   
  31.      }   
  32.   }   
  33.      
  34.      
  35. </SCRIPT>  
  36.   
  37.  </HEAD>  
  38.   
  39. <BODY>  
  40. <FORM name="myform" id="myform" action="register_success.htm" onSubmit="return checkForm( )">  
  41. <TABLE width="472" border="0" align="center" cellpadding="0" cellspacing="0">  
  42.   
  43.   <TR>  
  44.     <TD align="center">省份 </TD>  
  45.     <TD><SELECT name="selProvince" id="selProvince" onChange="changeCity( )">  
  46.        <OPTION>--请选择开户帐号的省份--</OPTION>  
  47.       <OPTION value="四川省">四川省</OPTION>  
  48.       <OPTION value="山东省">山东省</OPTION>  
  49.       <OPTION value="湖北省">湖北省</OPTION>  
  50.                         </SELECT></TD>  
  51.   </TR>  
  52.   <TR>  
  53.     <TD><DIV align="center">城市</DIV></TD>  
  54.     <TD><SELECT name="selCity" id="selCity" onChange="myfun1( )">  
  55.       <OPTION>--请选择开户帐号的城市--</OPTION>  
  56.           
  57.             </SELECT></TD>  
  58.   </TR>  
  59.   
  60. </TABLE>  
  61. </FORM>  
  62. </BODY>  
  63. </HTML>  
  64. </SPAN>  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锦瑟-华年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值