效果演示:
html代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>省市区联动</title> <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js" type="text/javascript"></script> <script src="/Scripts/script.js" type="text/javascript"></script> </head> <body> <h2>Demo:</h2> <select id="province"> <option value="0">请选择省份</option> </select> <select id="city"> <option value="0">请选择城市</option> </select> <select id="district"> <option value="0">请选择区县</option> </select> <!--下列为初始值(可选,编辑表单时设置)--> <input type="hidden" value="440000" id="pre_province"/> <input type="hidden" value="440500" id="pre_city"/> <input type="hidden" value="440511" id="pre_district"/> <script type="text/javascript"> $(function () { citySelector.Init($("#province"), $("#city"), $("#district"), $("#pre_province"), $("#pre_city"), $("#pre_district"), true); }); </script> </body> </html>
script.js代码:
/* author: elycir create: 2012-06 modify: 2012-08 description: 省市区三级(二级)联动 */ var citySelector = function () { var jsonProvince = "/content/city/json-array-of-province.js"; var jsonCity = "/content/city/json-array-of-city.js"; var jsonDistrict = "/content/city/json-array-of-district.js"; var initProvince = "<option value='0'>请选择省份</option>"; var initCity = "<option value='0'>请选择城市</option>"; var initDistrict = "<option value='0'>请选择区县</option>"; return { Init: function (province, city, district, preProvince, preCity, preDistrict, hasDistrict) { var that = this; that._LoadOptions(jsonProvince, preProvince, province, null, 0, initProvince); province.change(function () { that._LoadOptions(jsonCity, preCity, city, province, 2, initCity); }); if (hasDistrict) { city.change(function () { that._LoadOptions(jsonDistrict, preDistrict, district, city, 4, initDistrict); }); province.change(function () { city.change(); }); } setTimeout(function () { province.change(); }, 100); }, _LoadOptions: function (datapath, preobj, targetobj, parentobj, comparelen, initoption) { $.get( datapath, function (r) { var t = ''; // t: html容器 var s; // s: 选中标识 var pre; // pre: 初始值 if (preobj === undefined || preobj === null) { pre = 0; } else { pre = preobj.val(); } for (var i = 0; i < r.length; i++) { s = ''; if (comparelen === 0) { if (pre !== "" && pre !== 0 && r[i].code === pre) { s = ' selected=\"selected\" '; pre = ''; } t += '<option value=' + r[i].code + s + '>' + r[i].name + '</option>'; } else { var p = parentobj.val(); if (p.substring(0, comparelen) === r[i].code.substring(0, comparelen)) { if (pre !== "" && pre !== 0 && r[i].code === pre) { s = ' selected=\"selected\" '; pre = ''; } t += '<option value=' + r[i].code + s + '>' + r[i].name + '</option>'; } } } if (initoption !== '') { targetobj.html(initoption + t); } else { targetobj.html(t); } }, "json" ); } }; } ();
省市区json数据文件:点击下载