使用 VeeValidate 的 VueJS 表单验证,无法在某些移动设备上输入
VueJS Form validation with VeeValidate, can't type on some mobile devices
我们在使用 Vee-Validate
验证的表单中遇到了一个奇怪的问题
我们有一个输入:
<input
v-validate="'required|name'"
id="firstName"
v-model="firstName"
:class="{'is-invalid': errors.has('firstName'), 'filled': firstNameFilled}"
type="text"
class="form-control"
name="firstName">
<label for="firstName">Vorname*</label>
以下脚本:
computed: {
...mapGetters({
formData: 'registration/formData'
}),
firstNameFilled () {
return this.formData.firstName !== null
},
firstName: {
get () {
return this.formData.firstName
},
set (data) {
this.$store.dispatch('registration/updateFormData', { firstName:
data })
}
},
methods: {
async validate () {
this.registrationButtonDisabled = true
try {
const needCaptcha = this.$route.query.utm_campaign &&
this.$route.query.utm_campaign.includes('display');
this.$store.dispatch('registration/updateFormData', { needCaptcha: needCaptcha });
const result = await this.$validator.validateAll()
if (result) {
this.next()
}
} catch (e) {
console.log(e)
}
this.registrationButtonDisabled = false
}
问题:
在某些移动版 Chrome(版本 7)上,当您开始在输入字段中键入内容时,该字段会立即重置并验证错误。注:
- 这不会发生在所有版本 7 的 Chrome 上,具体取决于设备
- 如果将键盘连接到 phone 就可以了
- 只有在初始化后第一次输入该字段是通过触摸键盘完成时,才会出现这种情况。如果您使用普通键盘输入,请重置该字段,如果可以,则使用触摸键盘输入。
- 如果您不键入而是使用触摸键盘建议,它会正确验证但仍为空。 filled-Class 在这种情况下设置。这让我们认为模型已设置、验证,然后出于某种奇怪的原因重置。
这显然很难调试,有人知道吗?
所以 Vee-Validate 中存在一个错误。在某些移动设备上,$watch-API
的处理方式不同,这意味着 v-model
不是实时更新的。 v-validate
无法处理这个。
解决方法是将 data-vv-validate-on="blur"
添加到输入中,让 vee 等待模型实际设置。
尽管开发人员在几个月前做出了承诺,但似乎还不清楚这是否会得到修复。
这是 link 对 GitHub 的讨论:https://github.com/baianat/vee-validate/issues/1281#issuecomment-399920810
问题似乎与某些设备上的 Chrome 有关,与使用的版本和 Safari 无关。 Firefox 看起来很稳定
我们在使用 Vee-Validate
验证的表单中遇到了一个奇怪的问题
我们有一个输入:
<input
v-validate="'required|name'"
id="firstName"
v-model="firstName"
:class="{'is-invalid': errors.has('firstName'), 'filled': firstNameFilled}"
type="text"
class="form-control"
name="firstName">
<label for="firstName">Vorname*</label>
以下脚本:
computed: {
...mapGetters({
formData: 'registration/formData'
}),
firstNameFilled () {
return this.formData.firstName !== null
},
firstName: {
get () {
return this.formData.firstName
},
set (data) {
this.$store.dispatch('registration/updateFormData', { firstName:
data })
}
},
methods: {
async validate () {
this.registrationButtonDisabled = true
try {
const needCaptcha = this.$route.query.utm_campaign &&
this.$route.query.utm_campaign.includes('display');
this.$store.dispatch('registration/updateFormData', { needCaptcha: needCaptcha });
const result = await this.$validator.validateAll()
if (result) {
this.next()
}
} catch (e) {
console.log(e)
}
this.registrationButtonDisabled = false
}
问题:
在某些移动版 Chrome(版本 7)上,当您开始在输入字段中键入内容时,该字段会立即重置并验证错误。注:
- 这不会发生在所有版本 7 的 Chrome 上,具体取决于设备
- 如果将键盘连接到 phone 就可以了
- 只有在初始化后第一次输入该字段是通过触摸键盘完成时,才会出现这种情况。如果您使用普通键盘输入,请重置该字段,如果可以,则使用触摸键盘输入。
- 如果您不键入而是使用触摸键盘建议,它会正确验证但仍为空。 filled-Class 在这种情况下设置。这让我们认为模型已设置、验证,然后出于某种奇怪的原因重置。
这显然很难调试,有人知道吗?
所以 Vee-Validate 中存在一个错误。在某些移动设备上,$watch-API
的处理方式不同,这意味着 v-model
不是实时更新的。 v-validate
无法处理这个。
解决方法是将 data-vv-validate-on="blur"
添加到输入中,让 vee 等待模型实际设置。
尽管开发人员在几个月前做出了承诺,但似乎还不清楚这是否会得到修复。
这是 link 对 GitHub 的讨论:https://github.com/baianat/vee-validate/issues/1281#issuecomment-399920810
问题似乎与某些设备上的 Chrome 有关,与使用的版本和 Safari 无关。 Firefox 看起来很稳定