element-ui自定义表单校验规则及常用表单校验(1)

本文详细介绍了ElementUI中validate函数的作用,如何在表单提交时自定义校验规则,以及如何正确设置rules和v-model以实现有效验证。还提到创建validation.js文件管理常用校验方法的实践技巧。

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

validate是ElementUI封装用于对整个表单进行验证的,参数是一个回调函数。该回调函数在校验结束后被调用,是否校验成功和未通过校验的字段。这个回调函数的原型为:function fun(rule, value, callback, source, options){},其中rule指向当前的规则对象,value是需要进行校验的值,callback是验证之后的执行回调,source是跟value的值一致的键值对象(可以忽略),options是个额外的配置选项(可选)。所以常见的函数定义如下,校验手机号码是否正确。

在这里插入图片描述

validate校验

自定义校验方法是一个在校验结束后才会被调用回调函数,所以在提交表单的时候我们需要通过$refs来调用validate来继续自定义校验。自定义校验规则时必须保证每个分支都调用了callback方法,否则会导致el-form组件在使用validate方法时无法进入回调函数。调用validate()校验时需要prop属性绑定校验的字段名,否则无法校验v-model中绑定的值。

在这里插入图片描述

常用校验规则

为了方便我们还是定义一个validation.js文件来专门定义常用的校验方法,然后导入validation.js进而使用。这里注意自定义rules时外层的message高于callback中的错误提示,所以自定义规则时建议外层勿定义message,可以用两个规则来校验内容。定义好之后在需要用到的地方直接 import 引入,然后在 rules 校验中加入即可。

在这里插入图片描述

附上本文用到的源码

<el-form

:model=“loginForm”

autocomplete=“on”

class=“login-form”

:rules=“rules”

<el-input

placeholder=“请输入用户名”

name=“username”

type=“text”

v-model=“loginForm.username”

autocomplete=“on”

/>

### 实现 Element-UI 表单校验提示信息始终显示 为了使 Element-UI表单校验提示信息始终保持可见,可以通过自定义样式和逻辑来实现这一功能。以下是具体方法: #### 自定义样式调整 通过覆盖默认的 `element-ui` 样式,可以确保校验提示信息不会因为滚动或其他事件而隐藏。例如,可以在全局 CSS 或组件局部样式中添加如下代码[^1]: ```css .design-form-validateicon { .el-form-item--small.el-form-item { margin-bottom: 0; } .el-form-item .error-tip { position: absolute; right: 6px; top: 0; transition: 0.2s; } .el-form-item.is-error { .error-tip { color: #f74439; } .el-form-item__content .el-select + .error-tip { right: 26px; } } } ``` 上述样式会强制让错误提示图标保持固定位置并显眼。 #### 配置校验规则 对于 `element-ui` 版本 1.x 中的表单校验规则,需设置 `required` 属性为 `true` 并指定触发条件为 `'change|blur'`[^2]。然而,默认情况下这些消息会在失去焦点或输入变化时才显示。要使其一直显示,可通过以下方式解决: ##### 方法一:手动调用验证函数 在初始化阶段或者特定时刻主动调用 `validateField` 函数以触发表单项的校验状态。例如: ```javascript this.$refs.form.validate((valid) => {}); // 对于单独字段也可以这样操作: this.$refs.form.validateField('fieldName'); ``` 这一步骤能够立即激活对应字段的校验机制,并将其结果显示出来。 ##### 方法二:修改源码或扩展插件 如果希望更彻底地改变行为模式,则可能需要深入到框架内部去定制化开发。比如重写部分核心组件的行为逻辑使得它们不再依赖外部交互动作即可完成即时反馈处理过程;不过这种方式较为复杂且容易引发兼容性问题因此不推荐作为首选方案除非确实必要才行得通的话再考虑实施吧! 综上所述,最简便有效的方法还是采用 **方法一** 结合适当CSS美化达到预期目标效果最佳实践建议如此这般去做比较好一点哦亲~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值