这次遇到个问题:

1. 动态的添加指定的view内容。。嗯。。很简单。。wx:for就搞定

2. 动态添加的内容中有input,最终获取值的时候,要获取到所有input的值并且是一个数组。。嗯。。

3. 动态删除指定的已经添加的view内容。。

思路:

1. wx:for 循环view,添加一个,wx:for的内容就增加1个,那么循环的内容是用数字来循环还是数组呢?

2. input是循环出来的,所以不可能给不同的input绑定不同的 bindInput 事件,那么只有绑定一个输入事件,而且所有的值必须是一个数组的话,就必须要获取到装input的view块的索引,然后通过索引值来修改数组中的值。。

3. 删除的话,如果循环的内容是数字,那么就只有数字减一,最终删除的只有最后一个。那么循环的内容就只能是数组了。只要获取到当前需要删除的索引值,然后删除循环内容对应的值就完成了。

先来看看效果:

wxml:

<view class='add' bindtap='addInput'>增加</view>
<view class='box' wx:for='{{array}}' wx:key=''>
<view class='del' bindtap='delInput' data-idx='{{index}}'>删除</view>
<input type='text' class='b-ipt' placeholder='请输入' data-idx='{{index}}' value='{{inputVal[index]}}' bindinput='getInputVal'/>
</view>

(1) 循环的array是一个数组

(2) 删除和input都加了data-idx属性是因为都需要用到当前索引值。

wxss:

.add{
display: inline-block;
line-height: 30px;
padding: 0 12px;
background: skyblue;
}
.box{
margin-top: 10px;
clear: both;
overflow: hidden;
padding: 0 15px;
}
.b-ipt{
overflow: hidden;
border: 1px solid #ccc;
}
.del{
width: 40px;
float: right;
margin-left: 10px;
}

js:

data: {
array:[0],//默认显示一个
inputVal:[]//所有input的内容
},
//获取input的值
getInputVal:function(e){
var nowIdx=e.currentTarget.dataset.idx;//获取当前索引
var val=e.detail.value;//获取输入的值
var oldVal=this.data.inputVal;
oldVal[nowIdx]=val;//修改对应索引值的内容
this.setData({
inputVal:oldVal
})
},
//添加input
addInput:function(){
var old=this.data.array;
old.push(1);//这里不管push什么,只要数组长度增加1就行
this.setData({
array: old
})
},
//删除input
delInput:function(e){
var nowidx=e.currentTarget.dataset.idx;//当前索引
var oldInputVal=this.data.inputVal;//所有的input值
var oldarr=this.data.array;//循环内容
oldarr.splice(nowidx,1); //删除当前索引的内容,这样就能删除view了
oldInputVal.splice(nowidx,1);//view删除了对应的input值也要删掉
if (oldarr.length < 1) {
oldarr = [0] //如果循环内容长度为0即删完了,必须要留一个默认的。这里oldarr只要是数组并且长度为1,里面的值随便是什么
}
this.setData({
array:oldarr,
inputVal: oldInputVal
})
}

(1) array[0]表示最初需要循环一次,因为wx:for是根据数组长度来循环的。array里面的内容随便写,只要保证长度为1就行

(2) 如果你担心input输入的时候每次都要去取索引值影响性能,我建议你可以把获取input值的事件由 bindinput 改成  bindblur 。这样也没问题。

这样就完成了动态删除和添加的效果^_^。。

微信小程序之动态添加、删除指定内容(view)和获取input值的更多相关文章

  1. 微信小程序之动态获取元素宽高

    我以前一直以为微信小程序不能动态获取view元素的宽高.但是自从看到: wx.createSelectorQuery() 这个api接口,以前的某些问题就能得到解决了... 那么,这个api接口怎么用 ...

  2. 微信小程序:scroll滑到指定位置

    概述 这是我开发微信小程序遇到的坑中的一个,专门记录下来,供以后开发时参考,相信对其他人也有用. scroll滑到指定位置,有两种解决方案,一种是用scroll-view标签,另一种是用wx.page ...

  3. 关于微信小程序的动态跳转

    最近在研究微信小程序.在做一个简单的购物小程序时,遇到一个问题:如何通过扫码实现动态的跳转页面功能, 通过研究终于找到了解决方法: 首先当然要实现扫码解析功能js的代码: click: functio ...

  4. 图解微信小程序---实现行的删除和增加操作

    图解微信小程序之实现行的删除和增加操作 代码笔记部分 第一步:在项目的app.json中创建一个新的页面(页面名称英文,可自定义) 第二步:在创建的新页面中编写页面(注意bindtap属性值,因为是我 ...

  5. 微信小程序 JS动态修改样式

    微信小程序这个坑啊,js动态修改样式,我们并不能用js或者jq 轻轻松松一行代码搞定.或者用removeClass addClass 来修改样式. 以下是一种动态修改样式的方法,原理是绑定数据,然后动 ...

  6. 微信小程序如何动态增删class类名

    简述 由于微信小程序开发不同于以往的普通web开发, 因此无法通过js获取wxml文件的dom结构, 因此从js上直接添加一个类名应该不可能了. 可是我们可以通过微信小程序数据绑定以及view标签的& ...

  7. 微信小程序--地图上添加图片

    如何在微信小程序地图添加上,添加图片? 在微信小程序中,地图的层级最高,所以我们没有办法,通过定位,在地图上添加图片等信息; 处理办法: 添加控件:controls; 其中有个属性position,进 ...

  8. 微信小程序如何动态增删class类名达到切换tabel栏的效果

    微信小程序和vue还是有点差别的,要想实现通过动态切换class来达到切换css的效果,请看代码: //wxml页面: <view class="tab"> <v ...

  9. 【微信小程序】动态设置图片大小

    我们都知道微信小程序的组件image是用来显示图片的,它有一下几个属性:1.src              图片资源地址2.mode          图片裁剪.缩放的模式3.binderror   ...

随机推荐

  1. SQL Server 数据库部分常用语句小结(一)

    1. 查询某存储过程的访问情况 SELECT TOP 1000 db_name(d.database_id) as DBName, s.name as 存储名字, s.type_desc as 存储类 ...

  2. 网络编程 单纯UDP通信

    网络编程 单纯UDP通信 1,UDP发送端 2,UDP接收端 UDP发送端: #include <stdio.h> #include <unistd.h> #include & ...

  3. redhat yum ISO 本地源

    先将ISO文件挂载起来: [root@racdb1 ~]# mount -o loop /opt/soft/rhel-server-6.8-x86_64-dvd.iso /mnt/iso [root@ ...

  4. 利用java实现excel转pdf文件

    在有些需求当中我们需要抓取字段并且填充到excel表格里面,最后将excel表格转换成pdf格式进行输出,我第一次接触这个需求时,碰到几个比较棘手的问题,现在一一列出并且提供解决方案. 1:excel ...

  5. PowerDesigner导出SQL,注释为空时以name代替

    版本 操作步骤 打开Edit Current DBMS 选中Script->Objects->Column->Add 将Value中的内容全部替换为如下 %20:COLUMN% [% ...

  6. Linux文件目录

    简介: Linux 内核最初由芬兰的 Linus Torvalds 开发,后来他组建了团队,Linux 内核由这个团队维护. GNU 组织开发了很多核心软件和基础库,例如 GCC 编译器.C语言标准库 ...

  7. 【English】20190313

     indicators指针['ɪndɪkeɪtəz]  determine决定[dɪˈtɜ:rmɪn] Places null indicator bits at the front of each ...

  8. A. Points in Segments(cf a题, 水题)

    没什么好说的 #include<iostream> using namespace std; ], x, y,n, m, ans; int main(){ cin>>n> ...

  9. linux下 启动node 和关闭node

    1.用forever  进行管理 npm install -g forever forever start app.js //启动 forever stop app.js //关闭 2.用自带的服务n ...

  10. 搭建vue.js环境

    一.安装Node.js (以下安装环境均为win10) 下载链接:https://nodejs.org/en/download/ 官网给出了两个版本,LTS和Curren.字面意思是推荐大多数用户使用 ...