Vue.js - Element UI - 如何知道表单验证的状态
Posted
技术标签:
【中文标题】Vue.js - Element UI - 如何知道表单验证的状态【英文标题】:Vue.js - Element UI - How to know the state of form validation 【发布时间】:2017-11-08 00:05:17 【问题描述】:我正在使用 vue-js
和 element-ui
我想检查表单的验证状态,而无需单击submit button
示例
https://jsfiddle.net/nw8mw1s2/
重现步骤
点击每个字段
通过模糊触发验证
开始填充不同的输入
问题
当验证最后一个输入时,isFormValidated
会变成true
,我该怎么做。
也就是说,我怎么说“如果没有状态错误的字段,则将valudateState
转为true”
提示
我想我们可以检查表单的每个formItem
的validateState
。但我不知道具体怎么做。
【问题讨论】:
【参考方案1】:我会创建一个新方法(比如updateIsFormValidated
),并将其绑定到表单的原生focusout
事件:
<el-form :model="ruleForm2" @focusout.native="updateIsFormValidated" ...>
每次表单中的任何输入失去焦点时都会触发此方法。它将尝试检查表单组件中的每个字段是否已成功验证,如果任何表单项的验证状态仍处于等待状态,则每 100 毫秒触发一次:
updateIsFormValidated()
let fields = this.$refs.ruleForm2.fields;
if (fields.find((f) => f.validateState === 'validating'))
setTimeout(() => this.updateIsFormValidated() , 100);
else
this.isFormValidated = fields.reduce((acc, f) =>
let valid = (f.isRequired && f.validateState === 'success');
let notErroring = (!f.isRequired && f.validateState !== 'error');
return acc && (valid || notErroring);
, true);
Here's a working fiddle.
【讨论】:
如果其中一个字段不是强制性的或没有任何要针对jsfiddle.net/wwyxt8es验证的规则,则该解决方案不起作用 您可能想将let fields = this.$refs.ruleForm2.fields;
更改为 let mandatoryFields = this.$refs.informationTabForm.fields.filter((f) => f.isRequired === true);
无论如何,很好的解决方案,谢谢
当涉及clereable dropdown
时,我也找不到一个好的解决方案:jsfiddle.net/mab3q4f1
@Leo 更新了reduce
函数,将字段的required
属性考虑在内。不确定下拉组件,看起来它与表单的本机事件不兼容。也许您只需要在该组件的事件之一上指定 updateIsFormValidated
处理程序。
我为radio
的同样原因而挣扎 似乎validateState
在event
change
被触发之前没有更新。因此,要验证select
,您最好使用visible-change
事件,而对于radio
,它不起作用以上是关于Vue.js - Element UI - 如何知道表单验证的状态的主要内容,如果未能解决你的问题,请参考以下文章
如何使表格行可点击并展开行 - vue.js - element-ui
Vue.js 和 Jest - Element-UI 如何以编程方式确认 MessageBox?
如何在表格中添加图片(使用el-table、el-table-column),即在Vue.js中使用ui-element?
Vue Js Element UI如何在表格列中呈现数组对象