/*
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:"js/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) ? "" : "";
var city_json;
// 赋值市级函数
var cityStart=function(){
var prov_id=prov_obj.get(0).selectedIndex;
prov_obj.next().html(prov_obj.get(0).value);
if(!settings.required){
prov_id--;
};
city_obj.empty().attr("disabled",true);
dist_obj.empty().attr("disabled",true);
if(city_obj.empty()){
city_obj.parents(".city_div").css("display","block");
//city_obj.parents(".city_div").html("请选择");
}
if(dist_obj.empty()){
dist_obj.parents(".dist_div").css("display","none");
}
//
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");
city_obj.parents(".city_div").css("display","none");
dist_obj.parents(".dist_div").css("display","none");
}else if(settings.nodata=="hidden"){
city_obj.css("visibility","hidden");
dist_obj.css("visibility","hidden");
city_obj.parents(".city_div").css("display","inline-block");
dist_obj.parents(".dist_div").css("display","inline-block");
};
return;
};
// 遍历赋值市级下拉列表
temp_html=select_prehtml;
$.each(city_json.citylist[prov_id].c,function(i,city){
temp_html+="";
});
city_obj.html(temp_html).attr("disabled",false).css({"display":"","visibility":""});
city_obj.parents(".city_div").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;
city_obj.next().html(city_obj.get(0).value);
//alert(prov_obj.get(0).value);
//alert(city_id);
//$(".full_select .prov_con").html(prov_obj.get(0).value);
//$(".full_select .city_con").html(city_obj.get(0).value);
//$(this).parents(".full_select").html(prov_obj.get(0).value);
//$(this).parents(".full_select .city_con").html(city_obj.get(0).value);
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+="";
});
dist_obj.html(temp_html).attr("disabled",false).css({"display":"","visibility":""});
dist_obj.parents(".dist_div").attr("disabled",false).css({"display":"","visibility":""});
var dist_id=dist_obj.get(0).selectedIndex;
dist_obj.next().html(dist_obj.get(0).options[dist_id].value);
//dist_obj.next().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+="";
});
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);
dist_obj.next().html(settings.dist);
//console.log(settings.dist);
};
},1);
};
},1);
};
},1);
// 选择省份时发生事件
prov_obj.bind("change",function(){
cityStart();
});
// 选择市级时发生事件
city_obj.bind("change",function(){
distStart();
});
// 选择市级时发生事件
dist_obj.bind("change",function(){
var dist_id=dist_obj.get(0).selectedIndex;
dist_obj.next().html(dist_obj.get(0).value);
});
};
// 设置省市json数据
if(typeof(settings.url)=="string"){
$.getJSON(settings.url,function(json){
city_json=json;
init();
});
}else{
city_json=settings.url;
init();
};
};
})(jQuery);