vue element-ui 表单验证

该博客主要介绍了在前端开发中如何实现简单的必填字段验证规则和正则表达式验证,以及当表单验证错误时如何使光标跳转到第一个错误的输入框。示例代码展示了使用Element-UI库进行表单验证的方法,并提供了自定义验证规则的用法。
摘要由CSDN通过智能技术生成
import pattern from './pattern'
import {Message} from 'element-ui'

export default {
  /**
   * 简单必填字段验证规则
   * @param {string} str
   * @param {string} trigger
   * @param {boolean} required
   */
  str (str, required = false, trigger = 'blur') {
    return [{ required: required, message: str, trigger: trigger }]
  },

  /**
   * 表单验证错误,光标跳转到第一个错误的输入框
   * @param {vue} self 当前组件实例
   * @param {vue} vm form表单实例
   * @param {string} className 下拉容器的class名
   */
  error (self, vm, message = true, className = '.main-panel') {
    if (message) {
      Message({
        duration: 800,
        type: 'error',
        message: '页面输入有误,请检查!'
      })
    }
    self.$nextTick(_ => {
      let error = vm.$el.querySelector('.el-form-item__error')
      let parent = null
      if (error) {
        parent = error.parentNode.querySelector('div')
        if (parent.className.indexOf('date') > -1 || parent.className.indexOf('select') > -1) {
          let mainPage = document.querySelector(className)
          mainPage.scroll(0, parent.scrollTop + 100)
        } else {
          let el = parent.querySelector('input') || parent.querySelector('textarea')
          if (el) {
            el.focus()
          } else {
            let mainPage = document.querySelector(className)
            mainPage.scroll(0, parent.scrollTop + 100)
          }
        }
      }
    })
    return false
  },

  /**
   * 正则表达式验证
   * @param {string | object} reg  支持正则库中的正则表达式和自定义正则表达式
   * @param {string} str
   * @param {string} trigger
   */
  reg (reg, str, required = false, trigger = 'blur') {
    return [{
      validator: (rule, value, callback) => {
        if (!required && !value) {
          callback()
        } else if (value && typeof reg === 'object' && reg.test(value)) {
          callback()
        } else if (value && typeof reg === 'string' && pattern[reg].test(value)) {
          callback()
        } else {
          return callback(new Error(str))
        }
      },
      required: required,
      trigger: trigger
    }]
  }
}

使用方法

<el-form :rules="rules">
	<el-row>
          <el-col :span="13">
            <el-form-item prop="origin">
              <template slot="label">
                <el-button type="text"
                            style="padding: 0;"
                            @click="showStartDialog">始发地</el-button>
              </template>
              <el-input v-model="formData.origin"
                         disabled
                         placeholder="请输入始发地">
              </el-input>
            </el-form-item>
          </el-col>
        </el-row>
</el-form>
rules: {
          origin: [{ required: true, message: '请输入始发地', trigger: 'change' }, { validator: this.handleInput, trigger: 'blur' }] // 自定义
        },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值