微信小程序获取表单数据

学习小程序中,编辑页需要获取表单控件数据,获取方式有两种:

1.表单中的控件

2.非表单中的控件

 

项目中,需要修改完毕后,自动给 this.setData 赋值。每个页面中每个控件都些个单独的 handler 非常麻烦,代码维护难。

我就想想是否可以整理成一个公共方法,涉及到几个点:

1.如何动态取 this.data 中的值

2.如何动态设置 this.data 中的值

3.单选组和多选组的数据项如何动态读取、设置,怎么设置选中等

下面我整理了一些非表单中控件代码示例,大家看看

1.input 

wxml 中

 <input id="entity.FullName"  bindinput="handleInputChange"  value="{{entity.FullName}}" placeholder="请输入姓名" />

js 中

 // input输入框的值
  handleInputChange(event) {
    const inputVal = event.detail.value;
    const inputId = event.target.id; 
    this.setData({
        [`${inputId}`]: inputVal
    });
  }

event.target.id 获取的是 input 的 id

event.target.value 获取的是 input 的值

this.setData({

  [`${inputId}`]:inputVal

}); 动态设置 this.data.entity.FullName 属性。

注意:inputId 取得是<input id="entity.FullName" 的  “entity.FullName”

Page({
    data: {
        entity:{
            FullName:'张三'
        }
    }
});    

  

2.radio

<view class="line">
            <view class="title">性别:</view>
            <view class="input">
                <radio-group id="entity.Gender" data-itemname="genderItems" wx:for="{{genderItems}}" wx:key="value"  bindchange="handleRadio">
                    <label><radio value="{{item.value}}"  checked="{{item.checked}}" style='zoom:.6;'/>{{item.name}}</label>
                </radio-group>
            </view>
        </view>
// 触发readio
  handleRadio(event) {
    console.log(event);

    const inputVal = event.detail.value;
    const inputId = event.target.id; 
    this.setData({
        [`${inputId}`]: inputVal,
    });
    
    var itemname = event.currentTarget.dataset["itemname"];
    var valuename = event.currentTarget.dataset["valuename"];

    if(itemname == null || itemname=="")
    {
        return;
    }

    var items = this.data[`${ itemname }`];

    if(items!=null && items.length>0)
    {
        if(valuename == null || valuename =="")
        {
            //设置下默认 value 的名称
            valuename = "value";
        }
       
        for (let i = 0, len = items.length; i < len; ++i) {
            items[i].checked = items[i][`${valuename}`] === inputVal;
        }

        this.setData({
            [`${itemname}`]: items
        });
    }
  }

  

注意:

<radio-group id="entity.Gender" data-itemname="genderItems"   中的 “genderItems” 是 this.data.genderItems 下拉项内容

 data: {
        paras:{},
        genderItems:[
            {value: 'M', name: '男' ,checked:false},
            {value: 'F', name: '女' ,checked:false}
        ]
    }

  

3.Switch

<switch  id="entity.Active" bindchange="handleSwitch" checked="{{entity.Active}}" style='zoom:.6;' />

  

  // switch中的值
  handleSwitch(event) {
    const inputVal = event.detail.value;
    const inputId = event.target.id; 
    this.setData({
        [`${inputId}`]: inputVal,
    });
  }

 

4.Silder

<slider id="entity.Per" bindchange="handleSlideChange" value="100"  min="50" max="200" show-value/>

  

const inputVal = event.detail.value;
    const inputId = event.target.id; 
    this.setData({
        [`${inputId}`]: inputVal,
    });

  

原文地址:https://www.cnblogs.com/hujunmin/p/15752654.html