微信小程序獲取表單數據


學習小程序中,編輯頁需要獲取表單控件數據,獲取方式有兩種:

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,
    });

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM