Vendored
+1
File diff suppressed because one or more lines are too long
@@ -0,0 +1,144 @@
|
||||
/*
|
||||
Ajax 三级省市联动
|
||||
http://code.ciaoca.cn/
|
||||
日期:2012-7-18
|
||||
|
||||
settings 参数说明
|
||||
-----
|
||||
url:省市数据josn文件路径
|
||||
prov:默认省份
|
||||
city:默认城市
|
||||
dist:默认地区(县)
|
||||
nodata:无数据状态
|
||||
required:必选项
|
||||
------------------------------ */
|
||||
(function($){
|
||||
$.fn.citySelect=function(settings){
|
||||
if(this.length<1){return;};
|
||||
|
||||
// 默认值
|
||||
settings=$.extend({
|
||||
url:siteUrl+"public/js/city/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);
|
||||
Reference in New Issue
Block a user