-
Notifications
You must be signed in to change notification settings - Fork 1
/
citySelect.min.js
1 lines (1 loc) · 5.8 KB
/
citySelect.min.js
1
!function(){var a=!1,b=null,c=null;a||$.get("area.json",function(c){b=c,a=!0}),$.fn.setInputValue=function(a){var b=this;$.get("area.json",function(c){for(var d=null,e=null,f=null,g=c.length,h=0;h<g;h++)for(var i=c[h].citys.length,j=0;j<i;j++)for(var k=c[h].citys[j].county.length,l=0;l<k;l++)c[h].citys[j].county[l].id==a&&(d=c[h].name,e=c[h].citys[j].name,f=c[h].citys[j].county[l].name,$(b).val(d+" - "+e+" - "+f))})},$(document).on("focus",".citySelector",function(a){a.preventDefault(),a.stopPropagation();var e=$(this);c=e.data("hideName"),d.init(b,e)});var d=function(){return{pageSize:12,$regionUl:null,provinceText:"",cityText:"",areaText:"",areaId:null,$prev:null,$next:null,nextNum:0,prevNum:0,provinceStr:"",cityStr:"",areaStr:"",provinceId:null,cityId:null,addState:!1,init:function(a,b){var c=this;c.$regionUl=null;var d=b.offset().left,e=b.offset().top,f=b.height(),g=b.outerWidth(),h=$(window).width();if(e=e+f+2,$(".cityBox").addClass("hide"),!c.addState){var i='<div class="cityselect cityBox"><ul class="city-tabs"><li class="tab province-tab curhand selected">省份</li><li class="tab city-tab">城市</li><li class="tab area-tab">区县 </li></ul><div class="city-regions"><i class="prev cursor_p disabled"><<</i><i class="next cursor_p disabled">>></i><ul class="city-regions-box"></ul></div><div>';$("body").append(i),b.data("inputAdd",!1),c.addState=!0}var j=$(".cityBox"),k=j.width();h-d<k&&(d=h-(h-(d+g))-k),c.$prev=j.find(".city-regions .prev"),c.$next=j.find(".city-regions .next"),c.$regionUl=j.find(".city-regions-box"),j.css({left:d,top:e}),j.find(".tab").first().addClass("curhand selected").siblings(".tab").removeClass("selected curhand"),c.hideEvent(),j.removeClass("hide"),c.getProvince(a,b),c.clickTab(a,b)},hideEvent:function(){$(document).off("click").on("click",function(a){$(a.target).hasClass("citySelector")||$(a.target).parents("div").hasClass("cityBox")||$(a.target).hasClass("cityBox")||$(".cityBox").addClass("hide")})},getProvince:function(a,b){var c=this,d=a.length,e=Math.ceil(d/c.pageSize);c.setPageDefault(e),c.$regionUl.html(""),c.provinceStr="";for(var f=0;f<d;f++){var g='<li class="city-region province-list" data-province="'+f+'">'+a[f].name+"</li>";c.provinceStr+=g}c.$regionUl.html(c.provinceStr),c.getCity(a,b),c.$next.off("click"),c.clickNext(e)},getCity:function(a,b){var c=this;c.$regionUl.find(".province-list").off("click").on("click",function(d){d.preventDefault(),d.stopPropagation();var e=$(this);c.provinceId=e.data("province"),c.provinceText=e.text(),c.setCity(a,b)})},setCity:function(a,b){var c=this,d=c.provinceId,e=a[d].citys.length,f=Math.ceil(e/c.pageSize);c.setPageDefault(f),c.$regionUl.html(""),c.cityStr="";for(var g=0;g<e;g++){var h='<li class="city-region city-list" data-city="'+g+'">'+a[d].citys[g].name+"</li>";c.cityStr+=h}c.$regionUl.html(c.cityStr),c.getArea(a,b),c.$next.off("click"),c.clickNext(f),$(".cityBox").find(".city-tab").addClass("curhand selected").siblings(".tab").removeClass("selected")},getArea:function(a,b){var c=this;c.$regionUl.find(".city-list").off("click").on("click",function(d){d.preventDefault(),d.stopPropagation();var e=$(this);c.cityId=e.data("city"),c.cityText=e.text(),c.setArea(a,b)})},setArea:function(a,b){var c=this,d=c.provinceId,e=c.cityId,f=a[d].citys[e].county.length,g=Math.ceil(f/c.pageSize);c.setPageDefault(g),c.$regionUl.html(""),c.areaStr="";for(var h=0;h<f;h++){var i='<li class="city-region area-list" data-area="'+h+'" data-id="'+a[d].citys[e].county[h].id+'">'+a[d].citys[e].county[h].name+"</li>";c.areaStr+=i}c.$regionUl.html(c.areaStr),c.$next.off("click"),c.clickNext(g),c.setValue(b),$(".cityBox").find(".area-tab").addClass("curhand selected").siblings(".tab").removeClass("selected")},setValue:function(a){var b=this,d=" - ";b.$regionUl.find(".area-list").off("click").on("click",function(e){e.preventDefault(),e.stopPropagation();var f=$(this).text();b.areaId=$(this).data("id");var g=b.provinceText+d+b.cityText+d+f;a.val(g),a.prev("input").val(),$(".cityBox").addClass("hide");var h='<input type="hidden" name="'+c+'" value="'+b.areaId+'">',i=a.data("inputAdd");i?a.prev("input").val(b.areaId):(a.before(h),a.data("inputAdd",!0))})},clickPrev:function(a){var b=this;b.$prev.off("click").on("click",function(c){return c.preventDefault(),c.stopPropagation(),!$(c.target).hasClass("disabled")&&(b.$next.removeClass("disabled").addClass("curhand"),++b.nextNum,--b.prevNum,0===b.prevNum&&b.$prev.removeClass("curhand").addClass("disabled"),b.$regionUl.find(".city-region").slice(b.prevNum*b.pageSize,(a-b.prevNum)*b.pageSize).removeClass("hide"),void 0)})},clickNext:function(a){var b=this;b.nextNum=a,b.$next.off("click").on("click",function(c){c.preventDefault(),c.stopPropagation();var d=a;return!$(c.target).hasClass("disabled")&&1!==b.nextNum&&(b.$prev.removeClass("disabled").addClass("curhand"),--b.nextNum,++b.prevNum,1===b.nextNum&&b.$next.removeClass("curhand").addClass("disabled"),b.$regionUl.find(".city-region").slice(0,(d-b.nextNum)*b.pageSize).addClass("hide"),void 0)}),b.clickPrev(a)},setPageDefault:function(a){var b=this;b.nextNum=0,b.prevNum=0,b.$next.removeClass("curhand").addClass("disabled"),b.$prev.removeClass("curhand").addClass("disabled"),a>1&&b.$next.removeClass("disabled").addClass("curhand")},clickTab:function(a,b){var c=this;$(".cityBox").find(".tab").off("click").on("click",function(d){d.preventDefault(),d.stopPropagation();var e=$(this);if(e.hasClass("curhand")){e.addClass("selected").siblings(".tab").removeClass("selected");var f=e.index();switch(f){case 0:c.$regionUl.html(c.provinceStr);var g=Math.ceil($(c.provinceStr).length/c.pageSize);c.setPageDefault(g),c.getCity(a,b),c.clickNext(g);break;case 1:c.$regionUl.html(c.cityStr);var g=Math.ceil($(c.cityStr).length/c.pageSize);c.setPageDefault(g),c.getArea(a,b);break;case 2:c.$regionUl.html(c.areaStr);var g=Math.ceil($(c.areaStr).length/c.pageSize);c.setPageDefault(g),c.setValue(b)}}})}}}()}();