小程序动态添加input(一)

之前在开发过程中遇到这么一个需求,就是在创建模板得时候需要有很多标题,标题是动态添加得,且添加得标题可以删除,最终实现得效果图如下:

代码部分:

 1 <!--index.wxml-->
 2 <view class="container">
 3   <view class='template_title1 flex-x '>
 4     <view>模板内容</view>
 5   </view>
 6 
 7   <block wx:for="{{conLists}}" wx:key="index">
 8     <view class='template_title_list flex-x'>
 9       <view class="del" bindtap='del' data-index='{{index}}'>-</view>
10 
11       <input placeholder='请填写内容标题' bindinput='changeConTitle' data-index='{{index}}'></input>
12     </view>
13   </block>
14 
15   <view class='template_title flex-x' bindtap='add'>
16     <view class='add_con flex-x'>
17       <text>+</text>
18       <view>添加内容</view>
19     </view>
20   </view>
21 
22   <button class="btn" type="primary" bindtap="next">下一步</button>
23 </view>
 1 /**index.wxss**/
 2 
 3 page {
 4   background: #f2f2f2;
 5 }
 6 
 7 .flex-x {
 8   display: flex;
 9   align-items: center;
10 }
11 
12 .template_title, .template_title1, .template_title_list {
13   height: 90rpx;
14   background: #fff;
15   justify-content: space-between;
16   padding: 0 30rpx;
17   box-sizing: border-box;
18 }
19 
20 .template_title1 {
21   background: none;
22 }
23 
24 .template_title_list {
25   margin-bottom: 4rpx;
26 }
27 
28 .template_title > view, .template_title1 > view {
29   font-size: 32rpx;
30   color: #8f8f8f;
31   flex-shrink: 0;
32   margin-right: 20rpx;
33 }
34 
35 .template_title > input {
36   font-size: 28rpx;
37   color: #808080;
38   text-align: right;
39   flex-grow: 1;
40 }
41 
42 /* 添加内容 */
43 
44 .add_con > text {
45   font-size: 40rpx;
46   color: #f16765;
47   display: block;
48   margin-right: 20rpx;
49   margin-left: 10rpx;
50   line-height: 44rpx;
51 }
52 
53 .add_con > view {
54   font-size: 32rpx;
55   color: #7885cb;
56 }
57 
58 /* 删除内容 */
59 
60 .del {
61   font-size: 32rpx;
62   color: #f16765;
63   margin-right: 14rpx;
64   padding: 20rpx;
65 }
66 
67 input {
68   flex-grow: 1;
69   font-size: 28rpx;
70   color: #808080;
71 }
72 
73 .btn {
74   margin-top: 100rpx;
75 }
 1 //index.js
 2 Page({
 3 
 4   /**
 5    * 页面的初始数据
 6    */
 7   data: {
 8     conLists: [], //内容标题(如:今天完成工作、备注、次日工作安排)可以添加或者删除
 9   },
10 
11   /**
12  * 添加内容
13  */
14   add(e) {
15     // 点击添加按钮,就往数组里添加一条空数据
16     var _list = this.data.conLists;
17     _list.push("")
18     this.setData({
19       conLists: _list
20     })
21   },
22 
23   /**
24    * 删除内容
25    */
26   del(e) {
27     var idx = e.currentTarget.dataset.index;
28     var _list = this.data.conLists;
29     console.log(idx)
30     for (let i = 0; i < _list.length; i++) {
31       if (idx == i) {
32         _list.splice(idx, 1)
33       }
34     }
35     this.setData({
36       conLists: _list
37     })
38   },
39 
40   /**
41  * 获取输入的内容标题
42  */
43   changeConTitle(e) {
44     var idx = e.currentTarget.dataset.index; //当前下标
45     var val = e.detail.value; //当前输入的值
46     var _list = this.data.conLists; //data中存放的数据
47     for (let i = 0; i < _list.length; i++) {
48       if (idx == i) {
49         _list[i] = { modelLabel: val } //将当前输入的值放到数组中对应的位置
50       }
51     }
52     this.setData({
53       conLists: _list
54     })
55   },
56 
57   /**
58  * 下一步
59  */
60   next(e) {
61     var _conLists = this.data.conLists;
62     console.log('这是模板内容标题数组', _conLists)
63     for (let i = 0; i < _conLists.length; i++) {
64       if (!_conLists[i]) {
65         wx.showToast({
66           title: '请输入第' + `${i * 1 + 1}` + '条的模板内容标题!',
67           icon: 'none'
68         })
69         return;
70       }
71     }
72   },
73 
74 })
原文地址:https://www.cnblogs.com/rzsyztd/p/12531270.html