uni-app中ui-form表单校验select存在问题

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app中ui-form表单校验select存在问题

<uni-forms ref="calcForm" :modelValue="formData" :rules="rules" :label-width="200">  
    <uni-forms-item  
      label="性别"  
      name="sex"  
      required  
      :rules="[{ required: true, message: '请选择性别' }]"  
    >  
      <uni-data-select v-model="formData.sex" :localdata="sexRange"></uni-data-select>  
    </uni-forms-item>

校验无效果,直接跳出成功,不选中无所谓


1 回复

在uni-app中使用ui-form进行表单校验时,针对select组件的校验确实可能会遇到一些问题。这通常是因为select组件的校验逻辑需要特别处理,尤其是在获取选中值以及触发校验事件方面。以下是一个示例代码,展示了如何在uni-app中正确配置和使用ui-form对select组件进行校验。

首先,确保你的项目中已经安装了uni-ui库,并在页面中引入了相关组件。

<template>
  <view>
    <ui-form ref="form" :rules="rules" @validate="handleValidate">
      <ui-form-item label="选择项" prop="selectValue">
        <picker mode="selector" :range="options" v-model="formData.selectValue" @change="handlePickerChange">
          <view class="picker">{{ options[formData.selectValue] || '请选择' }}</view>
        </picker>
      </ui-form-item>
      <button type="primary" @click="submitForm">提交</button>
    </ui-form>
  </view>
</template>

<script>
export default {
  data() {
    return {
      formData: {
        selectValue: -1, // 初始值设为无效选项,便于校验
      },
      options: ['选项1', '选项2', '选项3'],
      rules: {
        selectValue: [
          { required: true, message: '请选择一项', trigger: 'change' },
        ],
      },
    };
  },
  methods: {
    handlePickerChange(e) {
      this.formData.selectValue = e.detail.value;
      // 手动触发校验
      this.$refs.form.validateField('selectValue');
    },
    handleValidate(valid) {
      if (valid) {
        uni.showToast({ title: '校验通过', icon: 'success' });
      } else {
        uni.showToast({ title: '校验失败', icon: 'none' });
      }
    },
    submitForm() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          uni.showToast({ title: '提交成功', icon: 'success' });
        } else {
          uni.showToast({ title: '请先完成表单校验', icon: 'none' });
          return false;
        }
      });
    },
  },
};
</script>

<style scoped>
.picker {
  padding: 10px;
  border: 1px solid #ddd;
  border-radius: 4px;
}
</style>

在这个示例中,我们使用picker组件模拟select选择框,并通过监听change事件来更新formData.selectValue。重要的是,在handlePickerChange方法中,我们手动触发validateField方法来对select字段进行校验。这样确保了每次选择改变后,校验逻辑都能正确执行。同时,在提交表单时,通过validate方法对整个表单进行校验。

回到顶部