十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
需要核心文件jquery.cityselect.js,通过ajax访问获取省地市数据文件
成都创新互联主要从事做网站、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务日照,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
[javascript] view plain copy
/*
Ajax 三级省市联动
日期:2012-7-18
settings 参数说明
-----
url:省市数据josn文件路径
prov:默认省份
city:默认城市
dist:默认地区(县)
nodata:无数据状态
required:必选项
------------------------------ */
(function($) {
$.fn.citySelect = function(settings) {
if (this.length 1) {
return;
}
;
// 默认值
settings = $.extend({
url: "city.min.js",
prov: null,
city: null,
dist: null,
nodata: null,
required: true
}, settings);
var box_obj = this;
var prov_obj = box_obj.find(".prov");
var city_obj = box_obj.find(".city");
var dist_obj = box_obj.find(".dist");
var prov_val = settings.prov;
var city_val = settings.city;
var dist_val = settings.dist;
var select_prehtml = (settings.required) ? "" : "option value=''请选择/option";
var city_json;
// 赋值市级函数
var cityStart = function() {
var prov_id = prov_obj.get(0).selectedIndex;
if (!settings.required) {
prov_id--;
}
;
city_obj.empty().attr("disabled", true);
dist_obj.empty().attr("disabled", true);
if (prov_id 0 || typeof (city_json.citylist[prov_id].c) == "undefined") {
if (settings.nodata == "none") {
city_obj.css("display", "none");
dist_obj.css("display", "none");
} else if (settings.nodata == "hidden") {
city_obj.css("visibility", "hidden");
dist_obj.css("visibility", "hidden");
}
;
return;
}
;
// 遍历赋值市级下拉列表
temp_html = select_prehtml;
$.each(city_json.citylist[prov_id].c, function(i, city) {
temp_html += "option value='" + city.n + "'" + city.n + "/option";
});
city_obj.html(temp_html).attr("disabled", false).css({"display": "", "visibility": ""});
distStart();
};
// 赋值地区(县)函数
var distStart = function() {
var prov_id = prov_obj.get(0).selectedIndex;
var city_id = city_obj.get(0).selectedIndex;
if (!settings.required) {
prov_id--;
city_id--;
}
;
dist_obj.empty().attr("disabled", true);
if (prov_id 0 || city_id 0 || typeof (city_json.citylist[prov_id].c[city_id].a) == "undefined") {
if (settings.nodata == "none") {
dist_obj.css("display", "none");
} else if (settings.nodata == "hidden") {
dist_obj.css("visibility", "hidden");
}
;
return;
}
;
// 遍历赋值市级下拉列表
temp_html = select_prehtml;
$.each(city_json.citylist[prov_id].c[city_id].a, function(i, dist) {
temp_html += "option value='" + dist.s + "'" + dist.s + "/option";
});
dist_obj.html(temp_html).attr("disabled", false).css({"display": "", "visibility": ""});
};
var init = function() {
// 遍历赋值省份下拉列表
temp_html = select_prehtml;
$.each(city_json.citylist, function(i, prov) {
temp_html += "option value='" + prov.p + "'" + prov.p + "/option";
});
prov_obj.html(temp_html);
// 若有传入省份与市级的值,则选中。(setTimeout为兼容IE6而设置)
setTimeout(function() {
if (settings.prov != null) {
prov_obj.val(settings.prov);
cityStart();
setTimeout(function() {
if (settings.city != null) {
city_obj.val(settings.city);
distStart();
setTimeout(function() {
if (settings.dist != null) {
dist_obj.val(settings.dist);
}
;
}, 1);
}
;
}, 1);
}
;
}, 1);
// 选择省份时发生事件
prov_obj.bind("change", function() {
cityStart();
});
// 选择市级时发生事件
city_obj.bind("change", function() {
distStart();
});
};
// 设置省市json数据
if (typeof (settings.url) == "string") {
$.getJSON(settings.url, function(json) {
city_json = json;
init();
});
} else {
city_json = settings.url;
init();
}
;
};
})(jQuery);
省市区要实现三级联动,肯定要有一个级联对应关系,即哪个省下面有哪些市,哪些市下面有哪些区/县,所以在json数据中就需要使用parent、id这些字面量来标明相应的对应关系。当然不一定非要用parent,其他名称也行,只要能对应上就行。
HTML
首先在head中载入jquery库和cityselect插件。
script type="text/javascript" src="js/jquery.js"/script
script type="text/javascript" src="js/jquery.cityselect.js"/script
接下来,我们在#city中,放置三个select,并且三个select分别设置class属性为:prov、city、dist,分别表示省、市、区(县)三个下拉框。注意如果只想实现省市二级联动,则去掉第三个dist的select即可。
div id="city"
select class="prov"/select
select class="city" disabled="disabled"/select
select class="dist" disabled="disabled"/select
/div
jQuery
调用cityselect插件非常简单,直接调用:
$("#city").citySelect();
自定义参数调用,设置默认省市区。自定义参数调用,设置默认省市区。
$("#city").citySelect({
url:"js/city.min.js",
prov:"湖南", //省份
city:"长沙", //城市
dist:"岳麓区", //区县
nodata:"none" //当子集无数据时,隐藏select
});
当然,你还可以扩展,自定义下拉列表选项数据,你可以根据需要设置下拉内容,注意数据格式一定要为JSON格式。
$("#city").citySelect({
url:{"citylist":[
{"p":"前端技术","c":[{"n":"HTML"},{"n":"CSS","a":[{"s":"CSS2.0"},{"s":"CSS3.0"}]},
{"n":"JAVASCIPT"}]},
{"p":"编程语言","c":[{"n":"C"},{"n":"C++"},{"n":"PHP"},{"n":"JAVA"}]},
{"p":"数据库","c":[{"n":"Mysql"},{"n":"SqlServer"},{"n":"Oracle"}]},
]},
prov:"",
city:"",
dist:"",
nodata:"none"
});
你还可以利用PHP等后台语言将数据库中的数据转换成JSON格式,然后使用url参数指向后台地址也能实现无刷新联动效果。
$("#city").citySelect({
url:"data.php"
});
先加载出省的下拉列表,选择后再通过ajax获取相应的市的下拉列表
选择市后再ajax获取区的下拉列表。