我是靠谱客的博主 无私帆布鞋,这篇文章主要介绍js select实现省市区联动选择,现在分享给大家,希望可以做个参考。

最近整了一一些表单类的移动页面,遇到了一个省市区的联动选择,本来想着用公用库里面的以前pc端的省市区选择组件,但是发现pc端的效果在手机端用效果太不理想,设计没给出具体的设计效果,只好自己整了select原生的省市区选择效果,样式使用手机自带的效果,感觉样式效果凑合还能用,数据还是用的pc的数据,只是把组件的给重写了一下,代码效果如下:

复制代码
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
var $ = require('jquery'), $window = $(window), data = require('./data-new'), $doc = $(document); var __DEFAULTS__ = { wrap:'', itemName: ['省', '市', '区/县'], items: ['province', 'city', 'area'], callback: function(field, index) {} // 点击切换得时候才会执行 }; function Area(options){ options = $.extend({}, __DEFAULTS__, options); var that = this; that.wrapper = $(options.wrap); that.selectArr = that.wrapper.data('default')?that.wrapper.data('default').split(','):[110000,110100,110101]; // that.items = options.items; that.itemName = options.itemName; that.callback = options.callback; that.setValue(); that.events(); that.default = that.wrapper.data('default'); //默认输出省市区的id that.validinput = $("#default-area"); var validval = that.default!==undefined?that.default:''; that.validinput.val(validval); } Area.prototype = { constructor: Area, //创建select,输出相应的数据 createItems:function(itemname,data,selectId){ var that = this; //如果默认的defalut值没输出,则默认的给select添加相应的填写提示 var html = '<select name="'+itemname+'">'+(that.default === undefined ?'<option value="'+itemname+'" selected ="selected">'+that.itemName[that.index]+'</option> ' : ''); for (var k in data) { html += '<option value ="'+ data[k].id +'"'+(selectId === data[k].id ? 'selected = "selected"' : '')+'>' + data[k].name + '</option>'; } html += '</select>'; return html; }, //设置初始值 setValue:function(){ var that = this, html = ''; $.each(that.selectArr,function(index,k){ that.index = index; html += that.createItems(that.items[index],that.getData(that.items[index],that.selectArr[index-1]),k); }) that.wrapper.append(html) }, //获取数据 getData: function(type, pid) { if (type === 'province') { return data.provinces || []; // 省份信息不需要pid } if (type === 'city') { return data.cities[pid] || []; } if (type === 'area') { return data.areas[pid] || []; } }, //获取select索引值 getItemIndex:function(type){ var that = this; for(var i= 0,l = that.items.length;i<l;i++){ if(that.items[i] == type){ return i; } } }, //触发change时候,select下一位值重新初始化 setItemVal:function(select){ var that = this; var $this = select, previd = $this.val(), $type =$this.attr('name'), $nxtType = ''; if($type!='area'){ $nxtType = that.items[that.getItemIndex($type)+1]; var data = that.getData($nxtType,previd), html = that.createItems($nxtType,data,previd), nextSelect = $('select[name="'+$nxtType+'"]'); if($this.siblings('select[name="'+$nxtType+'"]').length>0){ nextSelect.remove(); } $this.after(html); nextSelect.find('option:first').prop('selected',true); $('select[name="'+$nxtType+'"]').trigger('change'); } else{ that.validinput.val($this.val()).trigger('validate') } that.index = that.getItemIndex($type); //触发change后可以设置回调函数 if (that.callback) { that.callback.call(this, select, that.getItemIndex($type)); } }, events:function(){ var that = this; //select change事件 $doc.on('change','.area-container select',function(){ that.setItemVal($(this)); }) } } module.exports = Area;

html代码:

复制代码 代码如下:
复制代码
<input type="hidden" name="defaultArea" value="" id="default-area" >  //必填项,为了添加验证触发验证用
<div class="area-container" data-default=""></div>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

最后

以上就是无私帆布鞋最近收集整理的关于js select实现省市区联动选择的全部内容,更多相关js内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(159)

评论列表共有 0 条评论

立即
投稿
返回
顶部