element提交自动定位校验不通过位置并提示

文章讲述了如何在Vue项目中使用ElementUI的el-form时,实现提交时自动定位并提示第一个未通过校验的字段的方法,包括使用ref和封装validate方法来达到此目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在vue项目中,el-form表单使用的频率很高,当页面内容较多提交的时候无法一时间定位到哪个字段没填。这里简单记录一下element提交自动定位校验不通过位置并提示的解决方法:

主要步骤:

1、在有必填校验的el-form-item元素中通过ref定义一个名字(通常与prop一致);

    <el-form
              ref="solutionForm"
              :model="solutionForm"
              label-width="180px"
              :rules="disabled ? rules : rulesOne"
              class="inline-form label-ellipsis input-full"
              :disabled="disabled"
            >
              <el-row type="flex" class="flex-wrap">
                <el-col :span="8">
                  <el-form-item label="解决方案行业:" prop="TRADE" ref="TRADE">
                    <el-select
                      v-model="solutionForm.TRADE"
                      placeholder="请选择"
                      @change="getTRADE"
                    >
                      <el-option
                        v-for="item in TRADE_DICT"
                        :key="item.FIELD_VALUE"
                        :label="item.FIELD_DESC"
                        :value="item.FIELD_VALUE"
                        v-show="!item.disabled"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="一级场景:" prop="FIRST_SCENE" ref="FIRST_SCENE">
                    <el-select
                      v-model="solutionForm.FIRST_SCENE"
                      placeholder="请选择"
                      @change="getFIRST_SCENE"
                    >
                      <el-option
                        v-for="item in FIRST_SCENE_DICT"
                        :key="item.FIELD_VALUE"
                        :label="item.FIELD_DESC"
                        :value="item.FIELD_VALUE"
                        v-show="!item.disabled"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="二级场景:" prop="SECOND_SCENE" ref="SECOND_SCENE">
                    <el-select
                      v-model="solutionForm.SECOND_SCENE"
                      placeholder="请选择"
                    >
                      <el-option
                        v-for="item in SECOND_SCENE_DICT"
                        :key="item.FIELD_VALUE"
                        :label="item.FIELD_DESC"
                        :value="item.FIELD_VALUE"
                        v-show="!item.disabled"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
              </el-row>
    </el-form>

 2、把提交校验的validate方法进行封装,在提交的时候先调用校验方法进行非空判断;

export default{
        methods:{
            submitAudit:_.debounce(async function () {
                this.messageStr = [];
                try {
                    await Promise.all([
                      this.validateLocation('solutionForm'),
                    ]);
                } catch (error) {
                  this.$message.warning(this.messageStr.join("、"));
                  this.fullScreenLoading = false;
                  return;
                }
            },
                                   
          // 校验不通过自动定位到首个校验不通过的位置处
          validateLocation(formName){
            this.$refs[formName].validate((valid, object) => {
              if (valid) {
                return true;
              } else {
                for (let key in object) {
                  object[key].map((item) => {
                    this.messageStr.push(item.message);
                  });
                  let dom = this.$refs[Object.keys(object)[0]];
                  if (Object.prototype.toString.call(dom) !== "[object Object]") {
                    dom = dom[0];
                    return; // 结束语句并跳出语句,进行下个语句执行
                  }
                  // 根据form表单的中的ref名称定位,自动滚动到校验处
                  dom.$el.scrollIntoView({
                    block: "center",
                    behavior: "smooth",
                  });
                }
                throw new error();  // 单个form表单校验不通过就终止循环
              }
            })
          },
        }
 实现效果:

当最后提交的时候,自动定位到最开始不符合校验的字段处,并对所有不符合校验的字段进行提示。

参考文档:element表单校验新玩法:一键定位未通过字段位置_修改 element form表单验证信息位置-优快云博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值