关于element Form表单的下拉框出现自动校验

关于element Form表单的下拉框出现自动校验

Form表单的校验一定要遵循文档的要求,不然就会出现自动校验或校验状态取消不了这种情况

 <el-form ref="Form" :model="Form" :rules="FormRules" label-width="100px" class="demo-ruleForm formMargin">
      
            <el-form-item label="所属单位:"  class="fw60" prop="enterpriseNum"> 
              <el-input v-model="Form.enterpriseNum" placeholder="请输入所属单位"></el-		input>
            </el-form-item> 
            
            <div class="line">
                <el-form-item label="用户姓名:"  class="fw48"  prop="name" >
                    <el-input v-model="Form.name" placeholder="输入用户姓名"></el-input>
                </el-form-item>

                <el-form-item label="用户职位:"  class="fw48" >
                    <el-input v-model="Form.position" placeholder="输入用户职位"></el-input>
                </el-form-item>
            </div>

            <div class="line">
                <el-form-item label="登录账户:"  class="fw48" prop="account" >
                    <el-input  type="text"   v-model="Form.account"  placeholder="请输入登录账户"></el-input>
                </el-form-item>

                <el-form-item label="登录密码:"  class="fw48"  >
                    <el-input type="password" v-model="Form.password" placeholder="请输入登录密码"></el-input>
                </el-form-item>
            </div>
  
          <div class="line">  
            <el-form-item label="用户角色:"  class="fw48"  prop="roleNum" >
              <el-select v-model="Form.roleNum" @change="roleChange"   placeholder="请选择用户角色" style='width:100%;'>
              <el-option
                v-for="item in roleList"
                :key="item.id"
                :label="item.name"
                :value="item.id">
              </el-option>
              </el-select>
            </el-form-item>   
        </div>  

            <el-form-item label="用户备注:"  class="DrawerRight" >
                <el-input type="textarea" :rows="5" v-model="Form.notes" placeholder="请输入备注" resize="none"></el-input>
            </el-form-item>

              <el-form-item class="DrawerRight" style="display: flex;justify-content: flex-end;">
                <el-button class='edit_btns1' @click="submitForm('Form',3)" v-show="fl==2&&btnlist==1">保存</el-button>
                <el-button class='edit_btns1' @click="submitForm('Form',2)" v-show="fl==2&&btnlist==2">添加</el-button>
                <el-button type='info' plain @click="resetForm('Form')">重置</el-button>
              </el-form-item>
          </el-form>

在js中加入规则

 data () {
      return {
        Form:{
            "account":'',
            "name":'',
            "password":'',
            "unit":'',
            "position":'',
            "roleNum":'',
            "stateNum":'',
            "notes":'',
            "enterpriseNum":''
            // "enterpriseName":''
          },
          //校验规则
          FormRules:{
            enterpriseNum:[
              { required: true, message: '请输入所属单位', trigger: 'blur' }
            ],
            name:[
               { required: true, message: '输入用户姓名', trigger: 'blur' }
            ],
            account:[
              { required: true, message: '请输入登录账户', trigger: 'blur' }
            ],
            password:[
              { required: true, message: '请输入登密码', trigger: 'blur' }
            ],
            roleNum:[
               { required: true, message: '请选择用户角色', trigger: 'change' }
            ],
            stateNum:[
               { required: true, message: '请选择用用户状态', trigger: 'change' }
            ],
          },
      }
    },

最后。确认表单重置表单或打开表单时一定要把Form的内容置空
才能达到清除校验的效果

//打开表单
addmenu_btn(){
          let _this = this
          _this.$nextTick(()=>{
            _this.$refs['Form'].resetFields()//重置
         })
 			//清空Form数据
		  _this.Form={
              "account":'',
              "name":'',
              "password":'',
              "unit":'',
              "position":'',
              "roleNum":'',
              "stateNum":'',
              "notes":'',
              "enterpriseNum":''
        }
        },
  
### Element UI 表单清除校验结果的方式及替代方案 在 Element UI 中,`resetFields` 和 `clearValidate` 是两个常用的 API 用于处理表单校验状态。以下是它们的具体使用方式及相关注意事项。 --- #### **1. resetFields 方法** `resetFields` 不仅可以重置表单项的值为初始状态,还可以清除所有校验结果。它的典型应用场景是在用户提交失败后希望重新填写表单时使用。 ##### 使用示例 ```javascript this.$refs['form'].resetFields(); ``` 需要注意的是,如果在调用 `resetFields` 后立即手动设置字段值,可能会触发新的校验行为[^1]。为了避免这种问题,推荐结合 Vue 的 `$nextTick` 方法来确保 DOM 已经更新后再进行操作。 ##### 结合 $nextTick 的安全写法 ```javascript this.$nextTick(() => { this.$refs['form'].resetFields(); }); ``` --- #### **2. clearValidate 方法** 与 `resetFields` 不同,`clearValidate` 只会清除表单校验结果而不会改变表单项的值。适用于需要保留现有数据但清除错误提示的情况。 ##### 清除整个表单校验结果 ```javascript this.$refs['form'].clearValidate(); ``` ##### 清除特定字段的校验结果 如果只需要清除某些字段的校验结果,可以通过传递字段名数组实现: ```javascript this.$refs['form'].clearValidate(['fieldA', 'fieldB']); ``` --- #### **3. 替代方案:组合使用 resetFields 和 clearValidate** 在某些特殊场景下,单独使用 `resetFields` 或 `clearValidate` 并不能完全解决问题。例如,当表单中包含下拉框或其他复杂组件时,可能需要额外的操作才能彻底清除校验结果[^4]。 一种常见的做法是先调用 `resetFields` 重置表单,然后再通过 `clearValidate` 手动清除剩余的校验状态: ```javascript this.$nextTick(() => { this.$refs['form'].resetFields(); setTimeout(() => { this.$refs['form'].clearValidate(); }, 0); }); ``` 这种方法特别适合于那些校验结果显示不一致或未被正确清除的场景。 --- #### **4. 自定义校验方法的应用** 对于一些复杂的业务逻辑,可能需要借助自定义校验方法来增强灵活性。例如,在动态生成的表单中,可以通过绑定 `validator` 函数实现个性化校验规则[^3]。 ##### 示例代码 ```html <el-form-item label="账号" :prop="'account' + index" :rules="{ required: true, validator: validateAccount, trigger: 'blur' }"> <el-input v-model="item.account" autocomplete="off"></el-input> </el-form-item> ``` ##### 自定义校验函数 ```javascript validateAccount(rule, value, callback) { if (!value) { return callback(new Error('请输入账号')); } const regex = /^(?![\s\S]*[\u4e00-\u9fa5])[a-zA-Z0-9_-]{6,}$/; if (!regex.test(value)) { return callback(new Error('账号格式不符合要求')); } callback(); } ``` 在这种情况下,`clearValidate` 和 `resetFields` 都可以正常使用,但由于涉及动态生成的内容,务必确认每项的 `prop` 属性已正确定义。 --- ### 总结 - `resetFields` 主要用于重置表单的值和校验状态。 - `clearValidate` 专注于清除校验结果而不影响表单数据。 - 对于特殊情况(如下拉框校验残留),可通过组合使用两者解决。 - 动态表单需注意 `prop` 属性的唯一性,并合理设计自定义校验逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值