利用input实现手机通讯录添加联系人得功能(动态添加删除input),当输入新手机号得时候,自动增加一个input出来,当删除输入得手机号后,自动删除该input,在这里记录下来。最终效果图如下:
这里只展示动态添加联系人得部分,代码如下:
1 <!--pages/contact/contact.wxml--> 2 <view class=‘container‘> 3 4 <form bindsubmit="formSubmit"> 5 <view class=‘list flex-x‘> 6 <view class=‘list_name‘> 7 <text class=‘red_color‘>*</text>姓名 8 </view> 9 <input placeholder=‘请输入联系人姓名‘ name="name" maxlength="6" value="{{name}}" placeholder-style=‘font-size:28rpx;color#828282;‘></input> 10 <image src=‘../../image/right_icon.png‘></image> 11 </view> 12 13 <!-- 动态添加的手机号输入框 --> 14 <block wx:if="{{phoneList.length != 0}}"> 15 <view class=‘list flex-x‘ wx:for="{{phoneList}}" wx:key="index"> 16 <view class=‘list_name‘> 17 <text class=‘red_color‘>*</text>手机 18 </view> 19 <input placeholder=‘请输入手机号码‘ name="phone{{index}}" value=‘{{item.phone}}‘ focus=‘{{focus}}‘ type=‘number‘ maxlength=‘11‘ placeholder-style=‘font-size:28rpx;color#828282;‘ bindinput=‘changeInput‘ data-idx=‘{{index}}‘></input> 20 <image src=‘../../image/del_icon.png‘ bindtap=‘delInput‘ data-idx=‘{{index}}‘></image> 21 </view> 22 </block> 23 24 <!-- 固定的添加手机号输入框 --> 25 <view class=‘list flex-x‘> 26 <view class=‘list_name‘> 27 <text class=‘red_color‘>*</text>手机 28 </view> 29 <input placeholder=‘请输入手机号码‘ name="phone" type=‘number‘ value=‘{{inputVal}}‘ maxlength=‘11‘ placeholder-style=‘font-size:28rpx;color#828282;‘ bindinput=‘changePhone‘></input> 30 <image src=‘../../image/right_icon.png‘></image> 31 </view> 32 33 <button class=‘button‘ form-type=‘submit‘ type="primary">保存</button> 34 </form> 35 36 37 </view>
1 /* pages/contact/contact.wxss */ 2 3 page { 4 background: #f2f2f2; 5 } 6 7 .container { 8 padding-bottom: 96rpx; 9 box-sizing: border-box; 10 } 11 12 .flex-x { 13 display: flex; 14 align-items: center; 15 } 16 17 .list { 18 width: 100%; 19 height: 88rpx; 20 background: #fff; 21 margin-bottom: 4rpx; 22 padding: 0 30rpx; 23 box-sizing: border-box; 24 } 25 26 .list_name { 27 min-width: 10%; 28 flex-shrink: 0; 29 font-size: 28rpx; 30 color: #828282; 31 text-align: right; 32 } 33 34 text.red_color { 35 color: #f00; 36 } 37 38 .list > input { 39 height: 100%; 40 } 41 42 .list > input { 43 flex-grow: 1; 44 overflow: hidden; 45 text-overflow: ellipsis; 46 white-space: nowrap; 47 font-size: 28rpx; 48 color: #828282; 49 text-align: right; 50 } 51 52 .list > image { 53 width: 32rpx; 54 height: 32rpx; 55 margin-left: 20rpx; 56 flex-shrink: 0; 57 } 58 59 .button { 60 margin-top: 100rpx; 61 }
1 // pages/contact/contact.js 2 Page({ 3 4 /** 5 * 页面的初始数据 6 */ 7 data: { 8 phoneList: [], //手机号列表--动态 9 phoneVal: ‘‘, //输入的手机号--动态 10 inputVal: ‘‘, //输入的手机号--固定 11 focus: true, //控制动态输入框是否聚焦,清空的时候需要关闭聚焦 12 }, 13 14 /** 15 * 获取输入的手机号--固定手机号输入框 16 */ 17 changePhone(e) { 18 // console.log(e.detail.value) 19 var val = e.detail.value; 20 if (val) { 21 var phoneListOld = this.data.phoneList; 22 var phoneListNew = phoneListOld.concat({ 23 phone: val 24 }); 25 // console.log(‘插入后的数组‘, phoneListNew) 26 this.setData({ 27 phoneList: phoneListNew, //更新数组 28 inputVal: ‘‘, //清空固定的input值 29 focus: true, //动态input聚焦 30 }) 31 } 32 }, 33 34 /** 35 * 监听是否输入--动态手机号输入框 36 */ 37 changeInput(e) { 38 // console.log(e) 39 var val = e.detail.value; 40 var idx = e.currentTarget.dataset.idx; 41 var phoneListOld = this.data.phoneList; 42 // console.log(‘data中的手机号数组‘, phoneListOld) 43 // 输入值的时候将数组中对应的值更新 44 phoneListOld[idx].phone = val 45 // console.log(‘赋值后的数组‘, phoneListOld) 46 47 // 清空inout的时候就将当前清空的input删除 48 if (!val) { 49 phoneListOld.splice(idx, 1) 50 this.setData({ 51 focus: false 52 }) 53 } 54 this.setData({ 55 phoneList: phoneListOld, 56 }) 57 // console.log(‘更新后的数组‘, phoneListOld) 58 }, 59 60 /** 61 * 点击删除对应的input 62 */ 63 delInput(e) { 64 var idx = e.currentTarget.dataset.idx; 65 var phoneListOld = this.data.phoneList; 66 phoneListOld.splice(idx, 1) 67 this.setData({ 68 phoneList: phoneListOld, 69 }) 70 }, 71 72 /** 73 * 保存 74 * 在form表单事件中,使用wx.showToast会报错,原因我也没查出来,查出来得同学可以告知一下我 75 * 这里我使用得vant-ui组件中得toast提示框https://youzan.github.io/vant-weapp/#/quickstart 76 */ 77 formSubmit(e) { 78 console.log(‘获取所有input值‘, e) 79 var params = e.detail.value; 80 console.log(params) 81 return; 82 if (!params.name) { 83 wx.showToast({ 84 title: ‘请输入姓名!‘, 85 icon: ‘none‘ 86 }) 87 } else if (!params.phone0) { 88 Toast({ 89 mask: false, 90 duration: 1500, 91 message: ‘请输入手机号!‘, 92 forbidClick: true, //禁止背景点击 93 }) 94 } else { 95 // do thing... 96 } 97 }, 98 99 })