参考文档:
https://developers.weixin.qq.com/miniprogram/dev/component/picker.html
wxml
<view class="section"> <view class="section__title">普通选择器</view> <picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}"> <view class="picker"> 当前选择:{{array[index]}} </view> </picker> </view> <view class="section"> <view class="section__title">多列选择器</view> <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}"> <view class="picker"> 当前选择:{{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}} </view> </picker> </view> <view class="section"> <view class="section__title">时间选择器</view> <picker mode="time" value="{{time}}" start="09:01" end="21:01" bindchange="bindTimeChange"> <view class="picker"> 当前选择: {{time}} </view> </picker> </view> <view class="section"> <view class="section__title">日期选择器</view> <picker mode="date" value="{{date}}" start="2015-09-01" end="2017-09-01" bindchange="bindDateChange"> <view class="picker"> 当前选择: {{date}} </view> </picker> </view> <view class="section"> <view class="section__title">省市区选择器</view> <picker mode="region" bindchange="bindRegionChange" value="{{region}}" custom-item="{{customItem}}"> <view class="picker"> 当前选择:{{region[0]}},{{region[1]}},{{region[2]}} </view> </picker> </view>
js
Page({ data: { array: ['美国', '中国', '巴西', '日本'], objectArray: [ { id: 0, name: '美国' }, { id: 1, name: '中国' }, { id: 2, name: '巴西' }, { id: 3, name: '日本' } ], index: 0, multiArray: [['无脊柱动物', '脊柱动物'], ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'], ['猪肉绦虫', '吸血虫']], objectMultiArray: [ [ { id: 0, name: '无脊柱动物' }, { id: 1, name: '脊柱动物' } ], [ { id: 0, name: '扁性动物' }, { id: 1, name: '线形动物' }, { id: 2, name: '环节动物' }, { id: 3, name: '软体动物' }, { id: 3, name: '节肢动物' } ], [ { id: 0, name: '猪肉绦虫' }, { id: 1, name: '吸血虫' } ] ], multiIndex: [0, 0, 0], date: '2016-09-01', time: '12:01', region: ['广东省', '广州市', '海珠区'], customItem: '全部' }, bindPickerChange: function (e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ index: e.detail.value }) }, bindMultiPickerChange: function (e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ multiIndex: e.detail.value }) }, bindMultiPickerColumnChange: function (e) { console.log('修改的列为', e.detail.column, ',值为', e.detail.value); var data = { multiArray: this.data.multiArray, multiIndex: this.data.multiIndex }; data.multiIndex[e.detail.column] = e.detail.value; switch (e.detail.column) { case 0: switch (data.multiIndex[0]) { case 0: data.multiArray[1] = ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物']; data.multiArray[2] = ['猪肉绦虫', '吸血虫']; break; case 1: data.multiArray[1] = ['鱼', '两栖动物', '爬行动物']; data.multiArray[2] = ['鲫鱼', '带鱼']; break; } data.multiIndex[1] = 0; data.multiIndex[2] = 0; break; case 1: switch (data.multiIndex[0]) { case 0: switch (data.multiIndex[1]) { case 0: data.multiArray[2] = ['猪肉绦虫', '吸血虫']; break; case 1: data.multiArray[2] = ['蛔虫']; break; case 2: data.multiArray[2] = ['蚂蚁', '蚂蟥']; break; case 3: data.multiArray[2] = ['河蚌', '蜗牛', '蛞蝓']; break; case 4: data.multiArray[2] = ['昆虫', '甲壳动物', '蛛形动物', '多足动物']; break; } break; case 1: switch (data.multiIndex[1]) { case 0: data.multiArray[2] = ['鲫鱼', '带鱼']; break; case 1: data.multiArray[2] = ['青蛙', '娃娃鱼']; break; case 2: data.multiArray[2] = ['蜥蜴', '龟', '壁虎']; break; } break; } data.multiIndex[2] = 0; break; } console.log(data.multiIndex); this.setData(data); }, bindDateChange: function (e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ date: e.detail.value }) }, bindTimeChange: function (e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ time: e.detail.value }) }, bindRegionChange: function (e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ region: e.detail.value }) } })
效果
普通选择器;
多列选择器
时分秒(时间选择器)
年月日 日期选择器
省市选择器
传值问题:
微信小程序picker选择器传值
以最简单的普通选择器为例
wxml
<view class="cu-form-group margin-top"> <view class="title d-flex">普通选择器 </view> <picker class="w-100 h-100 borderBottom flex-1 d-flex jc-start ai-center" style="height:100rpx;font-size: 30rpx;color: #555;" bindchange="bindPickerChange" value="{{index}}" range="{{array}}"> <view class="picker"> 当前选择:{{array[currentChoose]}} </view> </picker> </view>
js
Page({ data: { array: ['工作', '放假', '加班', '调休'], currentChoose: 0 }, bindPickerChange: function (e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ currentChoose: e.detail.value }) }, })
wxss
.d-flex { display: flex; } .cu-form-group .title { text-align: justify; padding-right: 30rpx; font-size: 30rpx; position: relative; height: 60rpx; line-height: 60rpx; } .cu-form-group { background-color: var(--white); padding: 1rpx 30rpx; display: flex; align-items: center; min-height: 100rpx; justify-content: space-between; } .borderBottom { border-bottom: 1rpx solid #eee; } .ai-center { align-items: center; } .jc-start { justify-content: flex-start; } .flex-1 { flex: 1; } .cu-form-group input { flex: 1; font-size: 30rpx; color: #555; padding-right: 20rpx; }
array: [‘工作’, ‘放假’, ‘加班’, ‘调休’],对应的int值分别是0,1,2,3
在实际使用中
例子
微信小程序提交form表单内容
wxml
<form catchsubmit="confirmPublish"> <view class="cu-form-group margin-top"> <view class="title d-flex"> 姓名 </view> <view class="w-100 h-100 borderBottom flex-1 d-flex jc-start ai-center" style="height:100rpx;"> <input maxlength="15" placeholder="请输入姓名" value="{{name}}" data-name="name" bindblur="setInput"></input> </view> </view> <view class="cu-form-group margin-top"> <view class="title d-flex">性别 </view> <picker class="w-100 h-100 borderBottom flex-1 d-flex jc-start ai-center" style="height:100rpx;font-size: 30rpx;color: #555;" bindchange="bindPickerChange" value="{{index}}" range="{{array}}"> <view class="picker"> {{array[sex]}} </view> </picker> </view> <view class="cu-form-group margin-top"> <view class="title d-flex"> 手机号 </view> <view class="w-100 h-100 borderBottom flex-1 d-flex jc-start ai-center" style="height:100rpx;"> <input maxlength="15" placeholder="请输入姓名" value="{{phone}}" data-name="phone" bindblur="setInput"></input> </view> </view> <view class="cu-form-group margin-top"> <view class="title d-flex"> 证件号 </view> <view class="w-100 h-100 borderBottom flex-1 d-flex jc-start ai-center" style="height:100rpx;"> <input maxlength="15" placeholder="请输入姓名" value="{{idNumber}}" data-name="idNumber" bindblur="setInput"></input> </view> </view> <view class="cu-form-group margin-top"> <view class="title d-flex">日期选择器</view> <view class="picker" class="w-100 h-100 borderBottom flex-1 d-flex jc-start ai-center" style="height:100rpx;font-size: 30rpx;color: #555;" bind:tap="openPicker"> {{currentChoose}} </view> </view> <van-action-sheet show="{{ show }}" bind:close="onClose" bind:getuserinfo="onGetUserInfo"> <van-datetime-picker type="datetime" value="{{ currentDate }}" min-date="{{ minDate }}" max-date="{{ maxDate }}" bind:cancel="onCancel" bind:confirm="onConfirm" bind:change="onChange" /> </van-action-sheet> <view class="cu-form-group margin-top"> <view class="title d-flex">来访事由 </view> <picker class="w-100 h-100 borderBottom flex-1 d-flex jc-start ai-center" style="height:100rpx;font-size: 30rpx;color: #555;" bindchange="bindPickerChangeCause" value="{{index1}}" range="{{visitCausearray}}"> <view class="picker"> {{visitCausearray[visitCause]}} </view> </picker> </view> <view class="cu-form-group margin-top"> <view class="title d-flex"> 来访公司 </view> <view class="w-100 h-100 borderBottom flex-1 d-flex jc-start ai-center" style="height:100rpx;"> <input maxlength="15" placeholder="请输入姓名" value="{{visitCompany}}" data-name="visitCompany" bindblur="setInput"></input> </view> </view> <view class="cu-form-group margin-top"> <view class="title d-flex"> 被访姓名 </view> <view class="w-100 h-100 borderBottom flex-1 d-flex jc-start ai-center" style="height:100rpx;"> <input maxlength="15" placeholder="请输入姓名" value="{{interviewee}}" data-name="interviewee" bindblur="setInput"></input> </view> </view> <view class="cu-form-group margin-top"> <view class="title d-flex">被访部门 </view> <picker class="w-100 h-100 borderBottom flex-1 d-flex jc-start ai-center" style="height:100rpx;font-size: 30rpx;color: #555;" bindchange="bindPickerOrgan" value="{{index2}}" range="{{organarray}}"> <view class="picker"> {{organarray[visitOrganId]}} </view> </picker> </view> <button class='btn1' bindtap="bindViewTapsuccess" form-type="submit">完成</button> </form>
js
// pages/addsign/addsign.js var util = require('../../utils/util.js'); const app = getApp() Page({ /** * 页面的初始数据 */ data: { globalid: [], array: ['男', '女'], sex: 0, visitCausearray: ['面试', '开会', '拜访顾客', '项目实施', '其他'], visitCause: 0, organarray: ['生产部', '运营部', '营销部'], visitOrganId: 0, date: '2021-06-01', name: '', phone: '', idNumber: '', subscribeTime: '', visitCompany: '', interviewee: '', visitOrgan: '', //日期选择器 minHour: 0, maxHour: 24, minDate: new Date(1990, 1, 1).getTime(), maxDate: new Date(2099, 12, 31).getTime(), currentDate: new Date().getTime(), show: false, currentChoose: '' }, //日期选择器的处理 openPicker() { this.setData({ show: true }) }, onConfirm(e) { this.setData({ show: false, currentChoose: this.formatDate(new Date(e.detail)) }) }, onClose() { this.setData({ show: false }) }, onCancel() { this.setData({ show: false }) }, formatDate(date) { let taskStartTime if (date.getMonth() < 9) { taskStartTime = date.getFullYear() + "-0" + (date.getMonth() + 1) + "-" } else { taskStartTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" } if (date.getDate() < 10) { taskStartTime += "0" + date.getDate() } else { taskStartTime += date.getDate() } taskStartTime += " " + date.getHours() + ":" + date.getMinutes() this.setData({ taskStartTime: taskStartTime, }) return taskStartTime; }, //男女 bindPickerChange: function(e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ sex: e.detail.value }) }, //来访事由 bindPickerChangeCause: function(e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ visitCause: e.detail.value }) }, //部门 bindPickerOrgan: function(e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ visitOrganId: e.detail.value }) }, /** * 生命周期函数--监听页面加载 */ onl oad: function(options) { // 调用函数时,传入new Date()参数,返回值是日期和时间 var time = util.formatTime(new Date()); this.setData({ currentChoose: time }); }, setInput: function(e) { const { name } = e.target.dataset this.data[name] = e.detail.value this.setData(this.data) }, confirmPublish: function() { var that = this const data = {} data.name = this.data.name data.sex = this.data.sex data.phone = this.data.phone data.idNumber = this.data.idNumber data.subscribeTime = this.data.currentChoose data.visitCause = this.data.visitCause data.visitCompany = this.data.visitCompany data.interviewee = this.data.interviewee data.visitOrgan = this.data.visitOrgan data.visitOrganId = this.data.visitOrganId console.log(JSON.stringify(data)) wx.request({ url: 'http://192.xxx.4.1xx:8093/cs-applet/subscribe/addCallerSubscribe', method: 'POST', data: data, header: { 'content-type': 'application/json', }, success: function(res) { }, fail: function(error) { wx.showToast({ title: error.message || '保存失败' }) console.log(error) } }) }, })
css
/* 确认发布的按钮 */ .btn1 { width: 90%; margin-top: 70rpx; margin-bottom: 70rpx; background-color: #09bb07; color: white; font-size: 33rpx; border-radius: 13rpx; display: flex; flex-direction: row; align-items: center; justify-content: center; } .d-flex { display: flex; } .cu-form-group .title { text-align: justify; padding-right: 30rpx; font-size: 30rpx; position: relative; height: 60rpx; line-height: 60rpx; } .cu-form-group { background-color: var(--white); padding: 1rpx 30rpx; display: flex; align-items: center; min-height: 100rpx; justify-content: space-between; } .borderBottom { border-bottom: 1rpx solid #eee; } .ai-center { align-items: center; } .jc-start { justify-content: flex-start; } .flex-1 { flex: 1; } .cu-form-group input { flex: 1; font-size: 30rpx; color: #555; padding-right: 20rpx; }
点击完成的时候,将所有填写的值传给后端