JS 省市区三级联动:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JS 省市区三级联动</title>
</head>
<body>
  <select id="selProvince" name="province">  
  </select>
  <select id="selCity" name="city">  
  </select>
   <select id="selDist" name="area">  
  </select>
  <div></div>
<script type="text/javascript">  
var temp;
var P = new Array();
var C = new Array();
var D = new Array();
P = new Array("北京","上海","天津","重庆","广东","四川","浙江","贵州","辽宁","江苏","福建","河北","河南"," 吉林","黑龙江","山东","安徽","广西","海南","内蒙古","山西","宁夏","甘肃","陕西","青海","湖北","湖南"," 江西","云南","新疆","香港","澳门");
/*北京    */ C[0] = new Array("北京");
/*上海    */ C[1] = new Array("上海");
/*天津    */ C[2] = new Array("天津");
/*重庆    */ C[3] = new Array("重庆");
/*广东    */ C[4] = new Array("广州","深圳","珠海","佛山","惠州","东莞","中山","江门","湛江","汕头");
/*四川    */ C[5] = new Array("成都","自贡市","攀枝花","泸州");
/*浙江    */ C[6] = new Array("杭州","宁波","嘉兴","绍兴","温州","金华","衢州","舟山","台州","丽水","湖州");
/*贵州    */ C[7] = new Array("贵阳");
/*辽宁    */ C[8] = new Array("沈阳","大连");
/*江苏    */ C[9] = new Array("南京","苏州","南通","无锡","盐城","徐州","常州","连云港","常熟","扬州","镇江","泰州","昆山","吴江");
/*福建    */C[10] = new Array("福州","厦门","泉州");
/*河北    */C[11] = new Array("石家庄","唐山","邯郸","保定","廊坊","衡水","秦皇岛");
/*河南    */C[12] = new Array("郑州","洛阳");
/*吉林    */C[13] = new Array("长春","吉林");
/*黑龙江  */C[14] = new Array("哈尔滨");
/*山东    */C[15] = new Array("济南","青岛","威海","烟台","潍坊","日照","临沂","淄博");
/*安徽    */C[16] = new Array("合肥","芜湖","马鞍山");
/*广西    */C[17] = new Array("南宁","桂林","北海","柳州");
/*海南    */C[18] = new Array("海南","三亚");
/*内蒙古  */C[19] = new Array("呼和浩特","包头");
/*山西    */C[20] = new Array("太原");
/*宁夏    */C[21] = new Array("银川");
/*甘肃    */C[22] = new Array("兰州");
/*陕西    */C[23] = new Array("西安");
/*青海    */C[24] = new Array("西宁");
/*湖北    */C[25] = new Array("武汉","宜昌");
/*湖南    */C[26] = new Array("长沙","株洲","湘潭");
/*江西    */C[27] = new Array("南昌","赣州");
/*云南    */C[28] = new Array("昆明");
/*新疆    */C[29] = new Array("乌鲁木齐");
/*香港    */C[30] = new Array("香港");
/*澳门    */C[31] = new Array("澳门");
/*台湾    */C[31] = new Array("台北");
for(temp in C)
{
    D[temp] = new Array();
}
/*北京    */D[0][0] = new Array("海淀区,朝阳区,东城区,西城区,崇文区,宣武区,丰台区,石景山,房山区,门头沟,通州区,顺义区,昌平区,密云区,怀柔区,延庆区,平谷区,大兴区,燕郊区");
/*上海    */D[1][0] = new Array("黄浦区、卢湾区、徐汇区、徐家汇、长宁区、静安区、普陀区、闸北区 虹口区、杨浦区、宝山区、闵行区、嘉定区、浦东新区、松江区、金山区、青浦区、南汇区、奉贤区、崇明县");
/*天津    */D[2][0] = new Array("和平,西青,北辰,大港,南开,河东,河西,河北,津南,红桥,塘沽,汉沽,东丽,宝坻,蓟县,武清,宁河,静海,开发区");
/*重庆    */D[3][0] = new Array("南岸,渝北,万盛,大渡口,万州,北碚,沙坪坝,巴南,双桥,涪陵,江北,九龙坡,渝中");
/*广州    */D[4][0] = new Array("荔湾,越秀,东山,天河,海珠,黄埔,芳村,白云,花都,番禺,东莞,广州经济技术开发区,从化,增城,萝岗,清远,南沙,佛山");
/*深圳    */D[4][1] = new Array("福田,罗湖,南山,盐田,宝安,龙岗");
/*珠海    */D[4][2] = new Array("斗门,横琴,金湾,香洲,坦洲");
/*佛山    */D[4][3] = new Array("南海,顺德,三水,高明,禅城");
/*惠州    */D[4][4] = new Array("博罗县,大亚湾区,惠城区,惠东县,惠阳区,龙门县,仲恺区");
/*东莞    */D[4][5] = new Array("茶山,长安,常平,大朗,大岭山,道?,东城,东坑,凤岗,高?,莞城,洪梅,厚街,黄江,虎门,寮步,麻涌,南城,企石,桥头,清溪,沙 田,石碣,石龙,石排,松山湖,塘厦,万江,望牛墩,谢岗,樟木头,中堂");
/*中山    */D[4][6] = new Array("东区,南区,西区,石岐区,南头镇,古镇镇,东凤镇,小榄镇,黄圃镇,三角镇,民众镇,阜沙镇,火炬区,港口镇,东升镇,横栏镇,沙溪镇,大涌镇,板芙镇,五桂山镇,南朗镇,三乡镇,神湾镇,坦洲镇");
/*江门    */D[4][7] = new Array("新会区,蓬江区,江海区,台山市,恩平市,鹤山市,开平市");
/*成都    */D[5][0] = new Array("青羊,锦江,金牛,武侯,成华,龙泉驿,青白江,高新区,金堂县,新都区,温江区,郫县,双流县,新津县,大邑县,都江堰市,崇州市,邛崃市,蒲江县,彭州市,高新西区,高新西区");
/*杭州    */D[6][0] = new Array("上城,下城,西湖,拱墅,江干,滨江,余杭,萧山,富阳,桐庐,临安,淳安,建德");
/*宁波    */D[6][1] = new Array("海曙,江东,江北,鄞州,镇海,北仑,慈溪,余姚,奉化,宁海,象山,高新区,东钱湖旅游度假区");
/*嘉兴    */D[6][2] = new Array("嘉善,平湖,海盐,海宁,桐乡,秀洲,南湖,市区,经济开发区");
/*绍兴    */D[6][3] = new Array("绍兴县,诸暨市,上虞市,新昌县,越城区,嵊州市");
/*贵阳    */D[7][0] = new Array("云岩,南明,金阳新区,小河,花溪,乌当,白云,清镇,开阳,修文,息烽,小河片,金阳");
/*沈阳    */D[8][0] = new Array("和平,沈河,皇姑,大东,铁西,苏家屯,东陵,新城子,于洪,新民,辽中,康平,法库,浑南新区,沈北新区");
/*大连    */D[8][1] = new Array("西岗,中山,沙河口,甘井子,旅顺口,金州,开发区,高新园区,长兴岛,普兰店,瓦房店,庄河");
/*南京    */D[9][0] = new Array("白下,秦淮,玄武,鼓楼,下关,建邺,江宁,六合,浦口,栖霞,雨花,大厂,溧水,高淳");
/*苏州    */D[9][1] = new Array("园区,新区,平江,沧浪,金阊,虎丘,吴中,昆山,常熟,太仓,张家港,相城,吴江");
/*南通    */D[9][2] = new Array("城东区,城南区,城北区,城中区,狼山区,天生港,唐闸区,观音山区,开发区,海安县,如皋市,如东县,通州,海门,启东市,海门市,港闸,崇川");
/*无锡    */D[9][3] = new Array("崇安区,南长区,北塘区,新区,滨湖区,惠山区,马山区,锡山区,江阴市,宜兴市");
/*盐城    */D[9][4] = new Array("盐城,东台,大丰,盐都,建湖,响水,阜宁,射阳,滨海");
/*徐州    */D[9][5] = new Array("丰县,鼓楼,贾汪,金山桥开发区,沛县,邳州市,泉山,睢宁市,新城区,云龙,铜山区");
/*常州    */D[9][6] = new Array("金坛,溧阳,戚区,天宁,武进,新北,钟楼");
/*连云港  */D[9][7] = new Array();
/*常熟    */D[9][8] = new Array();
/*扬州    */D[9][9] = new Array("宝应市,广陵区,高邮市,邗江区,江都市,开发区,维扬区,仪征市");
/*镇江    */D[9][10] = new Array("丹阳市,句容市,扬中市,丹徒区,京口区,润州区,镇江新区");
/*泰州    */D[9][11] = new Array("城中区,城东区,城西区,城南区,城北区,高港区,泰兴市,姜堰市,兴化市,靖江市");
/*昆山    */D[9][12] = new Array("巴城镇,淀山湖镇,花桥镇,锦溪镇,陆家镇,千灯镇,玉山镇,张浦镇,周市镇,周庄镇");
/*福州    */D[10][0] = new Array("台江,鼓楼,仓山,晋安,马尾,闽侯县,长乐市");
/*厦门    */D[10][1] = new Array("开元,湖里,思明,鼓浪屿,集美,杏林,海沧,同安,翔安,漳州,龙岩,泉州");
/*泉州    */D[10][2] = new Array("丰泽区,安溪县,德化县,惠安县,晋江市,鲤城区,洛江区,南安市,泉港区,石狮市,永春县");
/*石家庄  */D[11][0] = new Array("桥东,桥西,新华,裕华,长安,开发区,正定,平山,鹿泉市,栾城,藁城");
/*唐山    */D[11][1] = new Array("曹妃甸工业区,丰南,丰润,高新区,古冶,海港开发区,汉沽管理区,开平,乐亭县,卢台开发区,路北,路南,滦南县,滦县,南堡开发区,迁安市,迁西县,唐海县,玉田县,遵化市");
/*邯郸    */D[11][2] = new Array();
/*保定    */D[11][3] = new Array();
/*廊坊    */D[11][4] = new Array("安次,广阳,三河,霸州,香河,永清,固安,文安,大城,大厂");
/*衡水    */D[11][5] = new Array("桃城区,深州市,冀州市,安平县,故城县,阜城县,景县,枣强县,武强县,饶阳县,开发区,武邑县,郊区");
/*秦皇岛  */D[11][6] = new Array("北戴河,昌黎县,抚宁县,海港,卢龙县,青龙县,山海关");
/*郑州    */D[12][0] = new Array("金水,中原,管城,二七,邙山,惠济,经济技术开发区,郑东新区");
/*洛阳    */D[12][1] = new Array("涧西区,西工区,老城区,?河区,洛龙区,吉利区,偃师市,栾川县,孟津县,咸阳县,伊川县,宜阳县");
/*长春    */D[13][0] = new Array("朝阳,宽城,二道,南关,绿园,双阳,其它,吉林地区,高新,经开,净月,汽开");
/*吉林    */D[13][1] = new Array("昌邑区,船营区,龙潭区,丰满区,永吉县,舒兰市,磐石市,蛟河市,桦甸市,经开区,高新区");
/*哈尔滨  */D[14][0] = new Array("道里,道外,南岗,动力,平房,香坊,太平,开发区,阿城,呼兰,松北");
/*济南    */D[15][0] = new Array("市中,天桥,历下,槐荫,历城,长清,高新,济阳,平阴,商河,章丘");
/*青岛    */D[15][1] = new Array("市南,市北,四方,李沧,崂山,城阳,黄岛,即墨市,胶州市,胶南市,平度市,莱西市,开发区");
/*威海    */D[15][2] = new Array("环翠区,文登市,荣成市,乳山市,高区,经区");
/*烟台    */D[15][3] = new Array("芝罘区,福山区,龙口市,莱阳市,莱州市,蓬莱市,招远市,莱山区,开发区,牟平区,栖霞市,海阳市,长岛县");
/*潍坊    */D[15][4] = new Array("奎文,潍城,寒亭,坊子,寿光市,高新技术开发区,经济开发区");
/*日照    */D[15][5] = new Array("东港");
/*临沂    */D[15][6] = new Array("兰山");
/*合肥    */D[16][0] = new Array("中市,东市,西市,郊区,庐阳区,包河区,瑶海区,蜀山区,高新区,新站区,经开区,政务区,滨湖新区");
/*南宁    */D[17][0] = new Array("兴宁,青秀,西乡塘,江南,良庆,邕宁,桂林市,北海市,钦州市");
/*桂林    */D[17][1] = new Array("秀峰区,叠彩区,象山区,七星区,雁山区,西城区,八里街区");
/*北海    */D[17][2] = new Array("海城,银海,铁山港,合浦");
/*海南    */D[18][0] = new Array("海口市,三亚市,文昌市,琼海市,万宁市,儋州市,东方市,五指山市,保亭县,洋浦经济开发区,其他,定安县,澄迈县");
/*呼和浩特*/D[19][0] = new Array("回民,玉泉,新城,金川开发区,金桥开发区,金山开发区,如意开发区,赛罕,郊区,托克托,清水河,武川,和林格尔,土默特左旗");
/*太原    */D[20][0] = new Array("杏花岭,小店,迎泽,尖草坪,万柏林,晋源,榆次");
/*银川    */D[21][0] = new Array("城区,新城,兴庆区,金凤区,西夏区,永定县,贺兰县,灵武市");
/*兰州    */D[22][0] = new Array("城关,七里河,西固,安宁,红古,永登,榆中,皋兰");
/*西安    */D[23][0] = new Array("城北,城南,城东,城内,城西,高新,长安,临潼,蓝田,阎良,灞桥,咸阳");
/*西宁    */D[24][0] = new Array("城中,城东,城西,城北,湟源,湟中,大通回族土族自治县");
/*武汉    */D[25][0] = new Array("江汉,江岸,?口,汉阳,武昌,洪山,青山,东西湖,黄陂,江夏,阳逻,新洲,蔡甸,汉南,沌口");
/*宜昌    */D[25][1] = new Array("夷陵区,西陵区,伍家岗区,点军区,?亭区,宜都市,当阳市,枝江市,东山开发区,远安县,兴山县,秭归县,长阳土家族自治县,五峰土家族自治县");
/*长沙    */D[26][0] = new Array("岳麓,天心,雨花,开福,芙蓉,星沙,长沙经济开发区");
/*南昌    */D[27][0] = new Array("东湖,西湖,青云谱,湾里,昌北,高新开发区,红谷滩,南昌县,青山湖,新建县,郊区,进贤,安义");
/*昆明    */D[28][0] = new Array("盘龙区,五华区,官渡区,西山区,安宁,呈贡,其他,东川");
/*乌鲁木齐*/D[29][0] = new Array("天山,沙伊巴克,新市,水磨沟,头屯河,南泉,东山");
/*香港    */D[30][0] = new Array("北区,大埔去,东区,观塘区,黄大仙区,九龙城区,葵青区,离岛区,南区,沙田区,屯门区,湾仔区,西贡区,油尖旺区,元朗区,中西区,荃湾区");
/*台北    */D[31][0] = new Array();
///城市与省份的序列对应、每个城市与每个区域数组对应
//创建城市对象,返回一个该城市所在省份及所拥有区域的对象
function createCity(sCityName)
{
    var oCity = new Object();
    oCity.province = "";
    oCity.city = sCityName;
    oCity.dist = new Array();
    oCity.pindex = -1;//所属省份在省份数组中的位置index
    oCity.cindex = -1;//城市在所属城市数组中的位置index(二者用来确定区域数组)
   
    var m = -1;var n = -1;
    for(var i = 0; i < C.length; i++)
    {
        for(var j=0; j < C[i].length; j++)
        {
            if(C[i][j] == sCityName)
            {
                oCity.province = P[i];
                oCity.dist = D[i][j];
                oCity.pindex = i;
                oCity.cindex = j;
                break;
            }
        }
       
        if(oCity.province != "")
        {
            break;
        }
    }
   
    return oCity;
}
/*三级、省、市、区域*/
/*面向对象*/
function oMenu(selProvince,selCity,selDist)
{
    ///selProvince省份的select控件id
    ///selCity城市的select控件id
    ///selDist区域的select控件id
    this.oProvince = document.getElementById(selProvince);   
   
    ///城市变化,初始化区域
    function fnInitDist(city)
    {
        var objCity = createCity(city);
        var dist = objCity.dist.toString().split(',');
        ClearSelect(selDist,"请选择区域");
        InitSelect(selDist,dist,"");
    };
   
    ///初始化城市
    function fnInitCity(province)
    { 
        for(var i = 0;i < P.length;i++)
        {
            if(P[i] == province)
            {
                ClearSelect(selCity,"请选择城市");
                InitSelect(selCity,C[i],"");
                ClearSelect(selDist,"请先选择城市");
                document.getElementById(selCity).onchange = function (){fnInitDist(this.value);};
                break;
            }
        }       
    };
   
    ///初始化省份
    this.fnInitProvince = function(){
        InitSelect(selProvince,P,"请选择省份");
        ClearSelect(selCity,"请先选择省份");
        ClearSelect(selDist,"请先选择城市");       
        this.oProvince.onchange = function (){fnInitCity(this.value);};
    };
   
   
   
    ///初始化select控件
    function InitSelect(obj,aInitValue,sMenu)
    {
        ///obj:要初始化的select控件对象的id
        ///aInitValue:要初始化的数组值
        ///sMenu:在select控件头部要添加的option,value为空;如果该参数为空,则只初始化aInitValue而不加头部
        if(sMenu != "")
        {
            document.getElementById(obj).options.add(new Option(sMenu,""));
        }
       
        for(var i = 0; i < aInitValue.length; i++)
        {
            document.getElementById(obj).options.add(new Option(aInitValue[i],aInitValue[i]));
        }       
    }
   
    function ClearSelect(obj,sMenu)
    {       
        document.getElementById(obj).options.length = 0;
        document.getElementById(obj).options.add(new Option(sMenu,""));       
    }   

}


    var oMenu = new oMenu("selProvince","selCity","selDist");//select ID
    oMenu.fnInitProvince();

  </script>
</body>
</html>