效果演示:
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数据文件:点击下载