在dialog弹框里放一个form,form里面的一组checkbox加了change验证,第一次打开后,把弹框关掉,再次打开弹框,什么都没做,这个用change的都会自动验证
[ElemeFE/element]在dialog弹框里放一个form,form里面的一组checkbox加了change验证后,在第二次打开弹框及以后,每次打开dialog弹框,什么都没做,它就自动验证了
回答
能提供demo么
类似下面这种结构,默认addFormVisible是false,在点击新增按钮时,改变addFormVisible=true会打开弹框,然后点弹窗的右上角的叉叉关掉,再次打开,会发现里面的checkbox自动验证,我并没有做提交操作。
`
`
验证规则是想下面这样写的 addFormRules: {//表单验证规则 RoleIds: [{ type: 'array', required: true, message: '請至少選擇一個角色', trigger: 'change' }], }
哎,帮你搞了个demo,是这样么,不是自己改改 http://jsfiddle.net/brp52a5p/
谢谢,我再找找原因吧,我单独拿出来用是没有问题的,是我自己哪里写的影响了
@maxwellwei1 form 上加一层 v-if
吧,dialog 关闭的时候把 form 销毁掉
@jikkai 谢谢,按你的方法真的解决了
遇到同样的问题。但是表单要怎么销毁啊。如果表单一只需要,只是清空表单数据怎么弄呢?
同样的问题,表象是:从一个页面路由到一个新页面,触发了rules数据的变动,el-form是watch了它的,然后触发验证,导致一打开页面就自动验证了一次,但刷新,新打开并不会,ssr的。
Edit: 疑似相关的 #8060
@yoyo837 我也遇到同样的问题了,请问你解决了吗
@bingzhimengwu 没有,一直有这个现象,你也是SSR场景吗?非SSR我没试过。 Edit: 试过非SSR场景似乎没有发现此问题
在SSR下,尝试https://github.com/ElemeFE/element/issues/3240#issuecomment-284315608 是可以的
我也遇到了这个问题,就是在打开关闭后自动出发了多选框的校验了,看看能不能用v-if解决
this.$refs.baseForm.resetFields();能够解决,你的问题。
我也遇到这个问题,也记录下我的解决方案。希望能帮到大家。
有问题代码,测试后发现是使用了 $set
if (this.rules && !this.rules[this.item.field]) {
this.$set(this.rules, this.item.field, [])
}
代码改为
//if (this.rules && !this.rules[this.item.field]) {
// this.$set(this.rules, this.item.field, [])
// }
this.rules[this.item.field] = []
遇到这个问题可以找下是否使用$set,
this.$refs.baseForm.resetFields();能够解决,你的问题。
这个重置表单的同时也解决了“新增”类型表单提交后继续新增数据,如果自已重置表单字段,程序默认启用了验证,用resetFields()完美重置
@kungcn 这样还是会闪一下 等弹框动画结束时红色校验才会被表单重置
v-if简单粗暴,但效果不太好,会略微闪一下。
还是在el-dialog里面写个close事件,然后this.$refs.form.resetFields()
更好一些。