HTML部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html>
<head lang=``"en"``>
<meta charset=``"UTF-8"``>
<title>多级联动封装</title>
<link href=``"./css/bootstrap.css"
rel=``"stylesheet"``>
<script src=``"./js/jquery.js"``></script>
<script src=``"./duoji.js"``></script>
</head>
<body>
<div class=``"row"
style=``"margin:100px auto;"``>
<div class=``"col-md-12"
id=``"box1"``></div>
</div>
<div class=``"row"
style=``"margin:100px auto;"``>
<div class=``"col-md-12"
id=``"box2"``></div>
</div>
<script>
//容器名,name名(新生成的class名)
$.select(``'box1'``,``'area1'``);
$.select(``'box2'``,``'area2'``);
</script>
</body>
</html>
duoji.js 代码
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
(``function
($) {
$.select=``function``(box,addInputClass){
var
i=``new
select;
return
i.init(box,addInputClass)
}
//声明多级联动 方法类
var
select =
new
Function();
select.prototype={
//定义类属性
init:``function``(box,addInputClass){
this``.boxName=box;
this``.box=$(``'#'``+box);
//需要添加元素的容器
this``.eleClass=addInputClass;``//每个事件的定位class
this``.first();``//新建一个select获取
},
first:``function``(){
//声明外部变量
var
boxName=``this``.boxName;
var
eleClass=
this``.eleClass;
var
box=``this``.box;
var
obj=``this``;
$.get(``"[http://127.0.0.1:83/areas](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2F127.0.0.1%3A83%2Fareas)"``, {id:``'0'``},
function``(data){
var
option=``"<option value=''>请选择</option>"``;
var
list=data.data;
for``(``var
key
in
list){
option+=``"<option value='"``+key+``"'>"``+list[key].areaname+``"</option>"``;
}
$(``'<div class="col-md-2 pl0"><select name="'``+eleClass+``'[]" num="0" pnode="'``+boxName+``'" cname="'``+eleClass+``'" class="form-control input-sm '``+eleClass+``'">'``+option+``'</select></div>'``).appendTo(box).find(``'select'``).bind(``'change'``,``function``(){obj.change($(``this``))});
},``'jsonp'``);
},
//change事件
change:``function``(event){
//声明
var
boxName=$(event).attr(``'pnode'``);
//获取触发事件者的pnode
var
className=$(event).attr(``'cname'``);``//获取触发事件者的cname
var
box =$(``"#"``+boxName);
//获取所有插入盒子的对象
var
eleClass=$(``"."``+className);
//获取所有Class所在元素组
var
num=eleClass.index($(event))+1;
//获取num的值
var
id=$(event).val();
//获取ajax发送id的头
var
obj=``this``;
//代表这个方法
//清除 后续添加的新的元素
eleClass.each(``function``(){
//这里的this 代表eleClass 遍历时的单个对象
//console.log($(this).attr('num'));
//console.log($().attr('num'));
if``($(``this``).attr(``'num'``)>$(event).attr(``'num'``)){
$(``this``).parent().remove();
}
});
/*
console.log(boxName);
console.log(className);
console.log($(event));
console.log($(event).val());
*/
//循环ajax方法
$.ajax({
type:
"get"``,
dataType:``"jsonp"``,
url:
"[http://127.0.0.1:83/areas](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2F127.0.0.1%3A83%2Fareas)"``,
data: {id:id},
sync:
false``,``//设置为同步
success:
function``(data){
//console.log(data);
var
list =data.data
if``(data.state===``'1'``){
var
option=``"<option value=''>请选择</option>"``;
for``(``var
key
in
list){
option+=``"<option value='"``+key+``"'>"``+list[key].areaname+``"</option>"``;
}
$(``'<div class="col-md-2 pl0"><select name="'``+className+``'[]" num="'``+num+``'" pnode="'``+boxName+``'" cname="'``+className+``'" class="form-control input-sm '``+className+``'" >'``+option+``'</select></div>'``).appendTo(box).find(``'select'``).bind(``'change'``,``function``(){obj.change(``this``)});
}
}
});
},
//查询当前盒子中的信息
log:``function``(){
var
boxName=$(event).attr(``'pnode'``);
//获取触发事件者的pnode
var
className=$(event).attr(``'cname'``);``//获取触发事件者的cname
var
box =$(``"#"``+boxName);
//获取所有插入盒子的对象
var
eleClass=$(``"."``+className);
//获取所有Class所在元素组
console.log(``"容器名:"``+boxName+``"\n 触发的class名:"``+className);
},
//第一个select框获取信息
getFirstElement:``function``(){
var
main=$(``'#'``+``this``.main);
$.get(``"[http://127.0.0.1:83/areas](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2F127.0.0.1%3A83%2Fareas)"``, {id:``'0'``},
function``(data){
var
option=``"<option value=''>请选择</option>"``;
var
list=data.data;
for``(``var
key
in
list){
option+=``"<option value='"``+key+``"'>"``+list[key].areaname+``"</option>"``;
}
main.html(option);
},``'jsonp'``);
}
}
})(jQuery)
后端提供的数据类型:json
如果有数据:state=1
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
data:{
110000:{id:
"110000"``, areaname:
"北京"``, pid:
"0"``, shortname:
"北京"``, level:
"1"``, position:
"tr_0"``, sort:
"1"``}
120000:{id:
"120000"``, areaname:
"天津"``, pid:
"0"``, shortname:
"天津"``, level:
"1"``, position:
"tr_0"``, sort:
"2"``}
130000:{id:
"130000"``, areaname:
"河北省"``, pid:
"0"``, shortname:
"河北"``, level:
"1"``, position:
"tr_0"``, sort:
"3"``}
140000:{id:
"140000"``, areaname:
"山西省"``, pid:
"0"``, shortname:
"山西"``, level:
"1"``, position:
"tr_0"``, sort:
"4"``}
150000:{id:
"150000"``, areaname:
"内蒙古自治区"``, pid:
"0"``, shortname:
"内蒙古"``, level:
"1"``, position:
"tr_0"``, sort:
"5"``}
210000:{id:
"210000"``, areaname:
"辽宁省"``, pid:
"0"``, shortname:
"辽宁"``, level:
"1"``, position:
"tr_0"``, sort:
"6"``}
220000:{id:
"220000"``, areaname:
"吉林省"``, pid:
"0"``, shortname:
"吉林"``, level:
"1"``, position:
"tr_0"``, sort:
"7"``}
230000:{id:
"230000"``, areaname:
"黑龙江省"``, pid:
"0"``, shortname:
"黑龙江"``, level:
"1"``, position:
"tr_0"``, sort:
"8"``}
310000:{id:
"310000"``, areaname:
"上海"``, pid:
"0"``, shortname:
"上海"``, level:
"1"``, position:
"tr_0"``, sort:
"9"``}
320000:{id:
"320000"``, areaname:
"江苏省"``, pid:
"0"``, shortname:
"江苏"``, level:
"1"``, position:
"tr_0"``, sort:
"10"``}
330000:{id:
"330000"``, areaname:
"浙江省"``, pid:
"0"``, shortname:
"浙江"``, level:
"1"``, position:
"tr_0"``, sort:
"11"``}
.....
},
state:``"1"
如果没有数据 state=0
例子:
state:"0"