现在存在一个上下级的关系,只有两个级别。
比如:省份、城市。
我要做两个下拉列表,省份下拉列表里的值改变以后,城市下拉列表里的内容要动态变化成该省的城市。
但是现在有个难题就是,当我选择了一个省份以后,怎么知道它有哪些市。
我本来想通过ajax去数据库动态查询的,但是为了减轻数据库和服务器的压力,以及考虑到响应速度,所以放弃了。
那我想现在就只有一种办法了,将这种对应关系存在页面上。
请教大家如何看待这个问题!谢谢!

解决方案 »

  1.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head>
    <script language="javascript">
    var stroption=["武汉-宜昌-黄石","长沙-顺水","南京-无锡-南通"];
    function setOption(){

    var index=document.getElementById("fcity").selectedIndex;
    var sel=document.getElementById("scity");
    sel.innerHTML="";
    var str=stroption[index-1].split("-");
    for(var i=0;i<str.length;i++){
             sel.options.add(new Option(str[i],  str[i] ));
    }
    }
    </script>
    <body> 
    省份:<select id="fcity" onChange="setOption();">
    <option value="">请选择身份</option>
    <option value="湖北">湖北</option>
    <option value="湖南">湖南</option>
    <option value="江苏">江苏</option>
    </select>城市:
    <select id="scity"></select></html>
      

  2.   

    /** 
    **   功能:省市联动js类
    **   作者:胡成洪
    **   日期:2010-06-10
    **/
    function __ProvinceAndCityClass()
    {
        //省
        this.ProvinceList=["北京市","天津市","上海市","重庆市","河北省","山西省","台湾省","辽宁省","吉林省","黑龙江省","江苏省", "浙江省","安徽省","福建省","江西省","山东省",
        "河南省","湖北省","湖南省","广东省","甘肃省","四川省","贵州省","海南省","云南省","青海省","陕西省","广西","西藏","宁夏","新疆","内蒙","澳门","香港","国外与其它"];
         //市
        this.CityList=
        [
            ["北京市"],["天津市"],["上海市"],["重庆市"],
            ["石家庄市","唐山市","秦皇岛市","邯郸市","邢台市","保定市","张家口市","承德市","沧州市","廊坊市","衡水市"],
            ["太原市","大同市","阳泉市","长治市","晋城市","朔州市","晋中市","运城市","忻州市","临汾市","吕梁市"],
            ["台北市","高雄市","基隆市","台中市","台南市","新竹市","嘉义市","台北县","宜兰县","桃园县","新竹县","苗栗县","台中县","彰化县","南投县","云林县","嘉义县","台南县","高雄县","屏东县","澎湖县","台东县","花莲县"],
            ["沈阳市","大连市","鞍山市","抚顺市","本溪市","丹东市","锦州市","营口市","阜新市","辽阳市","盘锦市","铁岭市","朝阳市","葫芦岛市"],
            ["长春市","吉林市","四平市","辽源市","通化市","白山市","松原市","白城市","延边朝鲜族自治州"],
            ["哈尔滨市","齐齐哈尔市","鹤岗市","双鸭山市","鸡西市","大庆市","伊春市","牡丹江市","佳木斯市","七台河市","黑河市","绥化市","大兴安岭地区"],
            ["南京市","无锡市","徐州市","常州市","苏州市","南通市","连云港市","淮安市","盐城市","扬州市","镇江市","泰州市","宿迁市"],
            ["杭州市","宁波市","温州市","嘉兴市","湖州市","绍兴市","金华市","衢州市","舟山市","台州市","丽水市"],
            ["合肥市","芜湖市","蚌埠市","淮南市","马鞍山市","淮北市","铜陵市","安庆市","黄山市","滁州市","阜阳市","宿州市","巢湖市","六安市","亳州市","池州市","宣城市"],
            ["福州市","厦门市","莆田市","三明市","泉州市","漳州市","南平市","龙岩市","宁德市"],
            ["南昌市","景德镇市","萍乡市","九江市","新余市","鹰潭市","赣州市","吉安市","宜春市","抚州市","上饶市"],
            ["济南市","青岛市","淄博市","枣庄市","东营市","烟台市","潍坊市","济宁市","泰安市","威海市","日照市","莱芜市","临沂市","德州市","聊城市","滨州市","菏泽市"],
            ["郑州市","开封市","洛阳市","平顶山市","安阳市","鹤壁市","新乡市","焦作市","濮阳市","许昌市","漯河市","三门峡市","南阳市","商丘市","信阳市","周口市","驻马店市","济源市"],
            ["武汉市","黄石市","十堰市","荆州市","宜昌市","襄樊市","鄂州市","荆门市","孝感市","黄冈市","咸宁市","随州市","仙桃市","天门市","潜江市","神农架林区","恩施土家族苗族自治州"],
            ["长沙市","株洲市","湘潭市","衡阳市","邵阳市","岳阳市","常德市","张家界市","益阳市","郴州市","永州市","怀化市","娄底市","湘西土家族苗族自治州"],
            ["广州市","深圳市","珠海市","汕头市","韶关市","佛山市","江门市","湛江市","茂名市","肇庆市","惠州市","梅州市","汕尾市","河源市","阳江市","清远市","东莞市","中山市","潮州市","揭阳市","云浮市"],
            ["兰州市","金昌市","白银市","天水市","嘉峪关市","武威市","张掖市","平凉市","酒泉市","庆阳市","定西市","陇南市","临夏回族自治州","甘南藏族自治州"],
            ["成都市","自贡市","攀枝花市","泸州市","德阳市","绵阳市","广元市","遂宁市","内江市","乐山市","南充市","眉山市","宜宾市","广安市","达州市","雅安市","巴中市","资阳市","阿坝藏族羌族自治州","甘孜藏族自治州","凉山彝族自治州"],
            ["贵阳市","六盘水市","遵义市","安顺市","铜仁地区","毕节地区","黔西南布依族苗族自治州","黔东南苗族侗族自治州","黔南布依族苗族自治州"],
            ["海口市","三亚市","五指山市","琼海市","儋州市","文昌市","万宁市","东方市","澄迈县","定安县","屯昌县","临高县","白沙黎族自治县","昌江黎族自治县","乐东黎族自治县","陵水黎族自治县","保亭黎族苗族自治县","琼中黎族苗族自治县"],
            ["昆明市","曲靖市","玉溪市","保山市","昭通市","丽江市","思茅市","临沧市","文山壮族苗族自治州","红河哈尼族彝族自治州","西双版纳傣族自治州","楚雄彝族自治州","大理白族自治州","德宏傣族景颇族自治州","怒江傈傈族自治州","迪庆藏族自治州"],
            ["西宁市","海东地区","海北藏族自治州","黄南藏族自治州","海南藏族自治州","果洛藏族自治州","玉树藏族自治州","海西蒙古族藏族自治州"],
            ["西安市","铜川市","宝鸡市","咸阳市","渭南市","延安市","汉中市","榆林市","安康市","商洛市"],
            ["南宁市","柳州市","桂林市","梧州市","北海市","防城港市","钦州市","贵港市","玉林市","百色市","贺州市","河池市","来宾市","崇左市"],
            ["拉萨市","那曲地区","昌都地区","山南地区","日喀则地区","阿里地区","林芝地区"],
            ["银川市","石嘴山市","吴忠市","固原市","中卫市"],
            ["乌鲁木齐市","克拉玛依市","石河子市 ","阿拉尔市","图木舒克市","五家渠市","吐鲁番市","阿克苏市","喀什市","哈密市","和田市","阿图什市","库尔勒市","昌吉市 ","阜康市","米泉市","博乐市","伊宁市","奎屯市","塔城市","乌苏市","阿勒泰市"],
            ["呼和浩特市","包头市","乌海市","赤峰市","通辽市","鄂尔多斯市","呼伦贝尔市","巴彦淖尔市","乌兰察布市","锡林郭勒盟","兴安盟","阿拉善盟"],
            ["澳门"],
            ["香港"],
            ["国外或其它"]
        ];
        this.selectProvince = null;
        this.selectCity = null;
        var obj = this;
        //初始化数据
        this.InitData=function(slcProvince,slcCity)
        {
             obj.selectProvince =slcProvince;
             obj.selectCity = slcCity;
            for(var index=0;index< obj.ProvinceList.length;index++)
            {
                obj.selectProvince.options.add(new Option(this.ProvinceList[index],obj.ProvinceList[index]));
            }
            obj.selectProvince.value = obj.ProvinceList[0];
            obj.selectProvince.onchange = obj.SlcProvinceChanged; 
            obj.SlcProvinceChanged();
        };
        this.SlcProvinceChanged = function()
        {
            var provinceIndex = obj.selectProvince.selectedIndex;
            obj.selectCity.options.length = 0;   
             for(var index=0;index< obj.CityList[provinceIndex].length;index++)
            {
                obj.selectCity.options.add(new Option(obj.CityList[provinceIndex][index],obj.CityList[provinceIndex][index]));
            }
            obj.selectCity.value = obj.CityList[provinceIndex][0];
        };
        
    } /**
     调用方式
     // 实例化
     var __provinceAndCity = new __ProvinceAndCityClass();
      __provinceAndCity.InitData(document.getElementById("slcProvince"),document.getElementById("slcCity"));
     **/
      

  3.   

    多级下拉
    ---------------------------------------------
    <div align="center"><form name="isc">
                  <table border="0" cellspacing="0" cellpadding="0">
                    <tr align="center">
                      <td nowrap height="11">
                        <select name="example" size="1" onChange="redirect(this.options.selectedIndex)">
                          <option selected>★网页天使</option>
                          <option>★CGI程序设计</option>
                          <option>★FLASH欣赏</option>
                        </select>
                        <select name="stage2" size="1" onChange="redirect1(this.options.selectedIndex)">
                          <option value=" " selected></option>')
                          <option value=" " selected>◤------第二层菜单------◢</option>
                          <option value=" " selected>◤------第二层菜单------◢</option>
                        </select>
                        <select name="stage3" size="1" onChange="redirect2(this.options.selectedIndex)">
                          <option value=" " selected></option>')
                          <option value=" " selected>◤------第三层菜单------◢</option>
                          <option value=" " selected>◤------第三层菜单------◢</option>
                        </select>
                  </table>
                </form>
              </div>
              <script language="JavaScript">
    <!--
    var groups=document.isc.example.options.length
    var group=new Array(groups)
    for (i=0; i<groups; i++)
    group[i]=new Array()group[0][0]=new Option("----第二层菜单----"," ");group[1][0]=new Option("」第一类"," ");
    group[1][1]=new Option("」第二类","47");
    group[1][2]=new Option("」第三类","46");
    group[1][3]=new Option("」第四类","45");group[2][0]=new Option("」第一类"," ");
    group[2][1]=new Option("」第二类","115");
    group[2][2]=new Option("」第三类","116");var temp=document.isc.stage2
    function redirect(x){
    for (m=temp.options.length-1;m>0;m--)
    temp.options[m]=null
    for (i=0;i<group[x].length;i++){
    temp.options[i]=new Option(group[x][i].text,group[x][i].value)
    }
    temp.options[0].selected=true
    redirect1(0)
    }var secondGroups=document.isc.stage2.options.length
    var secondGroup=new Array(groups)
    for (i=0; i<groups; i++)  {
    secondGroup[i]=new Array(group[i].length)
    for (j=0; j<group[i].length; j++)  {
    secondGroup[i][j]=new Array()  }}secondGroup[0][0][0]=new Option("----第三层菜单----"," ");
    secondGroup[1][0][0]=new Option("----第三层菜单----"," ");
    secondGroup[1][1][0]=new Option("」 第一节"," ");
    secondGroup[1][1][1]=new Option("」 第一节","../cgi/pagenew8.htm");
    secondGroup[1][1][2]=new Option("」 第一节","../cgi/pagenew8.htm");
    secondGroup[1][1][3]=new Option("」 第一节","../explain/route.htm");secondGroup[1][2][0]=new Option("」第三类"," ");
    secondGroup[1][2][1]=new Option("第二节","../cgi/pagenew7.htm");
    secondGroup[1][2][2]=new Option("第二节","../cgi/pagenew7.htm");
    secondGroup[1][2][3]=new Option("第二节","../explain/route.htm");secondGroup[1][3][0]=new Option("」第四类"," ");
    secondGroup[1][3][1]=new Option("第三节","../cgi/pagenew15.htm");
    secondGroup[1][3][2]=new Option("第三节","../explain/route.htm");secondGroup[2][0][0]=new Option("----第三层菜单----"," ");
    secondGroup[2][1][0]=new Option("」第三类"," ");
    secondGroup[2][1][1]=new Option("」第三节(1)","../pictures/cartoon/1.htm");
    secondGroup[2][1][2]=new Option("」第三节(2)","../pictures/cartoon/2.htm");
    secondGroup[2][1][3]=new Option("」第三节(3)","../pictures/cartoon/3.htm");secondGroup[2][2][0]=new Option("」第四类"," ");
    secondGroup[2][2][1]=new Option("第三节l(1)","../pictures/email/1.htm");
    secondGroup[2][2][2]=new Option("第三节(2)","../pictures/email/1.htm");var temp1=document.isc.stage3
    function redirect1(y){
    for (m=temp1.options.length-1;m>0;m--)
    temp1.options[m]=null
    for (i=0;i<secondGroup[document.isc.example.options.selectedIndex][y].length;i++){
    temp1.options[i]=new Option(secondGroup[document.isc.example.options.selectedIndex][y][i].text,secondGroup[document.isc.example.options.selectedIndex][y][i].value)
    }
    temp1.options[0].selected=true
    }function redirect2(){
    window.open(temp1.value,"","toolbar=no,location=yes,directories=no,status=no,menubar=no,scrollbars=yes, resizable=yes,copyhistory=yes,width=700,height=450");
    }
    //-->
    </script>
      

  4.   

    存到xml应该也是一个不错的方法
    但是是存一个xml文件 还是 存成一个xml字符串直接赋给js的某个变量呢因为这些数据都是动态的 存成xml文件的话 那每次都要生成xml文件 感觉太浪费
      

  5.   

    最普遍的方法是不需要用数据库,而是js执行查询服务器上的xml文件就ok了。如果有改动的话,才用服务器的php来改xml。