微信小程序:提交表单的字段必填限制

效果

说明

该例子涉及到的知识点

1、通过data-key统一处理input的触发事件,设值

2、时间选择器

3、必填字段数组整合

4、字段映射(设置提示信息为自定义文字)

5、防表单多次提交(使用自带的加载框showLoading)

代码

wxml

<view class="line1_1_input">
  <input type="text" value="{{formValues.input1}}" data-key="input1" placeholder="请输入文本1" bindinput="onInput" />
</view>
<view class="line1_1_input">
  <input type="text" value="{{formValues.input2}}" data-key="input2" placeholder="请输入文本2" bindinput="onInput" />
</view>
<view class="line1_1_input">
  <input type="text" value="{{formValues.input3}}" data-key="input3" placeholder="请输入文本3" bindinput="onInput" />
</view>
<view class="line1_1_input">
  <picker mode="date" value="{{formValues.birthDate}}" bindchange="onBirthDateChange">
    <view class="pickertext">
      <text style="color: {{formValues.birthDate == '请选择' ? '#8d8d8d' : ''}}">{{formValues.birthDate}}</text>
    </view>
  </picker>
</view>
<!-- 按钮 -->
<view class="Btn_layout">
  <view class="Btn_op" bindtap="submitForm">提交</view>
</view>

wxss

.line1_1_input {
  height: 60rpx;
  border: 1px solid black;
  margin: 5px 0;
}

picker {
  width: 100%;
}

.pickertext,
input {
  height: 60rpx;
  display: flex;
  align-items: center;
}

/* 提交按钮 */
.Btn_layout {
  margin-top:5%;
  width: 100%;
}

/* 按钮 */
.Btn_op {
  width: 100%;
  height:60rpx;
  display: flex; 
  justify-content: center;
  align-items: center;
  background-color: #6ca8f7;
  color: #fff;
  letter-spacing: 2px;
}

js

Page({
  data: {
    // 表单字段
    formValues: {
      input1: '', //文本1
      input2: '', //文本2
      input3: '', //文本3
      birthDate: '请选择', //出生年月
    },
    // 必填字段数组
    requiredFields: [
      'input1', 'birthDate'
    ],
    // 字段别名映射
    fieldAliases: { 
      input1: '文本1',
      input2: '文本2',
      input3: '文本3',
      birthDate: '日期',
    },
  },
  //出生日期
  onBirthDateChange: function (e) {
    const selectedDate = e.detail.value; //获取选择数据
    this.setData({
      [`formValues.birthDate`]: selectedDate,
    });
  },
  //文本输入框
  onInput: function (e) {
    const key = e.currentTarget.dataset.key;
    const value = e.detail.value;
    this.setData({
      [`formValues.${key}`]: value
    });
  },
  //提交
  submitForm(event) {
    var that = this;
    //提交时加载提示
    wx.showLoading({
      title: '正在提交',
      mask: true, // 防止用户交互
    });
    //获取表单数据
    const formData = that.data.formValues; 
    console.log('表单数据:', formData);
    //表单是否满足提交的变量
    let isValid = true;
    //必填项判断,循环必填字段数组,用every类似foreach,但能很好的解决跳出循环问题
    that.data.requiredFields.every(item => {
      //获取字段映射
      var fieldAliases = that.data.fieldAliases;
      //判单表单中的这个字段是否为空或者为‘请选择’,如果是表明就是必填字段未填
      if (formData[item] == '' || formData[item] == '请选择') {
        wx.hideLoading(); // 如果验证不通过,立即隐藏加载提示框
        //提示信息
        wx.showToast({
          title: `${fieldAliases[item]} 不能为空`,
          icon: 'none',
          duration:1000
        });
        //禁止提交标识
        isValid = false;
        // 返回false,some会停止遍历
        return false; 
      }
      // 继续遍历
      return true;
    });
    // 表单验证通过,可以提交表单
    if (isValid) {
      //表单信息处理
      // ...
      wx.hideLoading(); // 如果验证不通过,立即隐藏加载提示框
    }
  },
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

25号底片~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值