You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
4.1 KiB
JavaScript

/**
* city
* @authors baojunbo <baojunbo@gmail.com>
* @date 2014-03-25 10:54:37
*/
(function($) {
$.City = function(cityId, container, address) {
cityId = cityId;
this.cityId = cityId;
this.container = container;
this.provinces = provinces;
this.init();
};
var changeCity = function(cid, container, cityId, event) {
var cityList = citys[cid];
var containerId = container.attr("id");
var containerObj= document.getElementById(containerId);
var childs = containerObj.getElementsByTagName("select").length;
$("#" + containerId + " input").val(cityId);
if (typeof event != "undefined") {
var selectId = event.target.id;
var index = selectId.substring(selectId.indexOf("_") + 1);
var next = parseInt(index) + 1;
for (var i = next; i <= childs; i ++) {
// $("#level_" + i).remove();
var obj = document.getElementById("level_" + i);
if (obj) {
containerObj.removeChild(obj);
// console.log(obj);
}
}
$("#" + containerId + " input").val(cid);
}
if (typeof cityList != "undefined") {
var cChilds = containerObj.getElementsByTagName("select").length;
var cityNum = cityList.length;
var selected = false;
var select = document.createElement("select");
var nextChild = cChilds + 1;
var nextId = "level_" + nextChild;
var nextCid = cityId.substring(0, nextChild * 2);
select.id = nextId;
select.options.add(new Option("--", ""));
for (var i = 0; i < cityNum; i ++) {
if (nextCid == cityList[i]["id"] && typeof event == "undefined") {
selected = true;
} else {
selected = false;
}
select.options.add(new Option(cityList[i]["name"], cityList[i]["id"], selected, selected));
}
$(select).bind("change", function(event){
changeCity($(this).val(), container, cityId, event);
});
$(select).addClass("form-control").css({"width":"auto", "float": "left", "margin-right": "5px"});
container.append(select);
if (cityId != "" && typeof event == "undefined") {
// console.log(nextCid);
var ciyid = $(select).val();
changeCity(ciyid, container, cityId);
}
}
}
$.City.prototype = {
init: function() {
var selected = false;
var select = document.createElement("select");
var input = document.createElement("input");
var provinceId = this.cityId.substring(0, 2);
input.name = "cityId";
input.type = "hidden";
select.id = "level_1";
select.options.add(new Option("--", ""));
for(cid in this.provinces) {
if (cid == provinceId) {
selected = true;
} else {
selected = false;
}
select.options.add(new Option(this.provinces[cid]["name"], cid, selected, selected));
}
var container = this.container;
var cityId = this.cityId;
$(select).bind("change", function(event){
changeCity($(this).val(), container, cityId, event);
});
$(select).addClass("form-control").css({"width":"auto", "float": "left", "margin-right": "5px"});
container.append(select);
container.append(input).append(select);
if (provinceId.length < 2) {
provinceId = $("#level_1 option:selected").val();
}
if (cityId != "") {
changeCity(provinceId, container, cityId);
}
},
selected: function() {
// console.log("ddd");
},
};
$.fn.city = function(cityId) {
if (typeof cityId == "undefined") {
var cityId = "";
}
var city = new $.City(cityId, $(this));
city.selected();
}
$.cityText = function(cityId, domName) {
var city = "", cid = "";
var provinceId = cityId.substring(0, 2);
var length = cityId.length;
var level = length / 2;
if (typeof provinces[provinceId] != "undefined") city = provinces[provinceId]["name"];
for (var l = 1; l <= level; l ++) {
var postion = l * 2;
cid = cityId.substring(0, postion);
nextCid = cityId.substring(0, postion + 2);
if (typeof citys[cid] != "undefined") {
for (var i = 0; i < citys[cid].length; i ++) {
if (nextCid == citys[cid][i]["id"]) {
city += citys[cid][i]["name"];
break;
}
}
}
}
if (typeof domName != "undefined") {
$("#" + domName).text(city);
} else {
document.write(city);
}
}
})(jQuery);