Skip to content

ELement表单一键定位未通过字段位置


loading

vue2 方案

vue
<el-form ref="formRef">
	<el-form-item ref="formItemRef"></el-form-item>
</el-form>
js
	submitForm() {
      this.$refs.formRef.validate((valid, fields) => {
        if (valid) {
          console.log('表单验证通过')
        } else {
          // 获取key
          let key = Object.keys(fields)[0]
          // 获取key在formData中的索引
          let index = Object.keys(this.formData).indexOf(key)
          // 获取formItemRef的第index个元素
          let dom = this.$refs.formItemRef[index]
          // 滚动到dom元素
          dom.$el.scrollIntoView({
            block: 'center',
            behavior: 'smooth'
          })
        }
      })
    }

vue3 方案

vue
<el-form ref="formRef">
	<!-- v-for="(value, key) in formData"  -->
	<el-form-item :ref="el => (formItemRefs[key] = el)" />
</el-form>
js
// el-form表单ref
const formRef = ref(null)
// el-form-item表单项ref
const formItemRefs = ref({})
// 提交按钮
const submitForm = async () => {
  try {
    // 表单验证
    let valid = await formRef.value.validate()
    valid && console.log('表单验证通过')
  } catch (fields) {
    // 获取第一个错误字段的key
    const key = Object.keys(fields)[0]
    // 获取对应的表单项ref
    const errorFormItem = formItemRefs.value[key]
    if (errorFormItem) {
      // 使用 scrollIntoView 平滑滚动到错误字段
      errorFormItem.$el.scrollIntoView({
        block: 'center',
        behavior: 'smooth'
      })
    }
  }
}

Released under the MIT License.