最近整了一一些表单类的移动页面,遇到了一个省市区的联动选择,本来想着用公用库里面的以前pc端的省市区选择组件,但是发现pc端的效果在手机端用效果太不理想,设计没给出具体的设计效果,只好自己整了select原生的省市区选择效果,样式使用手机自带的效果,感觉样式效果凑合还能用,数据还是用的pc的数据,只是把组件的给重写了一下,代码效果如下:
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 = ''; 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;i0){ 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代码:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。