/* 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);