jquery.cityselect.js
5.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*
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: "/themes/simplebootx/Public/assets/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) ? "" : "<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);