validateAll 不适用于 v-for 生成的输入
validateAll doesn't work with inputs generated by v-for
我有一个表单,其中输入是通过 v-for 循环动态添加的。每个字段都应该经过验证,并且在用户提交表单之前应该检查它是否有效。问题是 this.$validator.validateAll()
总是 return 为真,即使输入无效。我做错了什么?
<div id="app">
<v-app id="inspire">
<v-flex md4 offset-md4>
<form data-vv-scope="photoForm">
<v-text-field v-for="index in 5"
:key="index"
:label="'photo' + index"
:error-messages="errors.collect('photoForm.photoName' + index)"
v-validate="'max:10'"
:data-vv-name="'photoForm.photoName' + index"
color="purple" autocomplete="on"
counter="10" >
</v-text-field>
</form>
<p>Is valid form? {{ validationResult }}</p>
</v-flex>
<v-btn @click="validate" color="purple" dark>
validate
</v-btn>
</v-app>
</div>
Vue.use(VeeValidate);
new Vue({
el: "#app",
data() {
return {
validationResult: ''
}
},
methods: {
validate() {
this.$validator.validateAll('photoForm').then(result => {
this.validationResult = result
})
}
}
});
以及我重现问题的代码笔:https://codepen.io/anon/pen/jjrJdE
我想您需要将表单数据存储在某处,以便验证可以进行。
见https://codepen.io/cwg999/pen/MMjWNj?editors=1011
我所做的主要更改是将动态生成的输入放入 data() 并使用它在 for-loop 中引用它们。
(注意:您也可以使用 v-model 代替 :value/@input)
<v-text-field v-for="o,i in photoForm"
:key="i"
:label="o.label+ ' ' + (i+1)"
:error-messages="errors.collect('photoForm.photoName' + i)"
v-validate="'max:10'"
:name="'photoName' + i"
:value=o.value
@input="o.value = $event"
color="purple" autocomplete="on"
counter="10" >
</v-text-field>
data() {
return {
validationResult: '',
photoForm:[
{label:'Photo',value:''},
{label:'Photo',value:''}
]
}
},
我有一个表单,其中输入是通过 v-for 循环动态添加的。每个字段都应该经过验证,并且在用户提交表单之前应该检查它是否有效。问题是 this.$validator.validateAll()
总是 return 为真,即使输入无效。我做错了什么?
<div id="app">
<v-app id="inspire">
<v-flex md4 offset-md4>
<form data-vv-scope="photoForm">
<v-text-field v-for="index in 5"
:key="index"
:label="'photo' + index"
:error-messages="errors.collect('photoForm.photoName' + index)"
v-validate="'max:10'"
:data-vv-name="'photoForm.photoName' + index"
color="purple" autocomplete="on"
counter="10" >
</v-text-field>
</form>
<p>Is valid form? {{ validationResult }}</p>
</v-flex>
<v-btn @click="validate" color="purple" dark>
validate
</v-btn>
</v-app>
</div>
Vue.use(VeeValidate);
new Vue({
el: "#app",
data() {
return {
validationResult: ''
}
},
methods: {
validate() {
this.$validator.validateAll('photoForm').then(result => {
this.validationResult = result
})
}
}
});
以及我重现问题的代码笔:https://codepen.io/anon/pen/jjrJdE
我想您需要将表单数据存储在某处,以便验证可以进行。
见https://codepen.io/cwg999/pen/MMjWNj?editors=1011
我所做的主要更改是将动态生成的输入放入 data() 并使用它在 for-loop 中引用它们。
(注意:您也可以使用 v-model 代替 :value/@input)
<v-text-field v-for="o,i in photoForm"
:key="i"
:label="o.label+ ' ' + (i+1)"
:error-messages="errors.collect('photoForm.photoName' + i)"
v-validate="'max:10'"
:name="'photoName' + i"
:value=o.value
@input="o.value = $event"
color="purple" autocomplete="on"
counter="10" >
</v-text-field>
data() {
return {
validationResult: '',
photoForm:[
{label:'Photo',value:''},
{label:'Photo',value:''}
]
}
},