VueJS Vee-Validate 验证未在输入时发生
VueJS Vee-Validate Validation Not Happening On Input
我有一个非常基本的 VueJS 表单,我正在其中验证输入。
表单验证在初始调用验证表单方法时发生,并且在每个输入上显示适当的验证消息。
令我困惑的是,在vee-validate example for the forms上,点击提交按钮会调用验证,然后显示每个表单输入的错误消息。在输入中输入值后(比如在名称字段中),您可以清楚地看到该字段的验证错误和消息已被删除。
我提供了一个示例 JSBin 来说明我遇到的问题。
在输出面板上,单击“验证表单”按钮,您可以看到验证正在运行。但是一旦您在输入字段中输入了一些文本(即名字),验证就不再起作用,除非您再次明确单击“验证表单”按钮。这似乎与 Vee-Validate 表单上的行为不同。
我是否忽略或遗漏了什么?感谢任何关于可能导致问题的意见,因为我对 VueJS 还很陌生。
谢谢。
来自 JSBin 的代码:
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<title>JS Bin</title>
</head>
<body>
<div id="app" class="container">
<form class="form-horizontal" @submit.prevent="validateBeforeSubmit">
<div class="form-group">
<label class="control-label col-md-2 col-sm-4" for="firstName">First Name:</label>
<div class="col-md-5 col-sm-8" v-bind:class="{ 'has-error' : errors.has('FirstName') }">
<input name="FirstName" v-model="firstName" v-validate:firstName.initial="'required|alpha|min:3'" class="form-control" type="text" id="firstName" placeholder="" v-bind:class="{ 'input': true, 'has-error': errors.has('FirstName') }" >
<span v-show="errors.has('FirstName')" class="help-block error text-danger">{{ errors.first('FirstName') }}</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2 col-sm-4" for="lastName">Last Name:</label>
<div class="col-md-5 col-sm-8" v-bind:class="{ 'has-error' : errors.has('LastName') }">
<input name="LastName" v-model="lastName" v-validate:lastName.initial="'required|alpha|min:3'" class="form-control" type="text" placeholder="" v-bind:class="{ 'input': true, 'has-error': errors.has('lastName') }" >
<span v-show="errors.has('LastName')" class="help-block error text-danger">{{ errors.first('LastName') }}</span>
</div>
</div>
</form>
<a class="btn btn-success btn-md " v-on:click="validateBeforeSubmit">Validate Form</a>
<hr />
<pre>{{ errors }}</pre>
<pre>{{ fields }}</pre>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>
<script src="https://cdn.jsdelivr.net/vee-validate/2.0.0-beta.21/vee-validate.min.js"></script>
<script src="https://code.jquery.com/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</body>
</html>
JS
Vue.use(VeeValidate);
var app = new Vue({
el: '#app',
data: {
firstName: null,
lastName: null
},
methods:{
validateBeforeSubmit: function(){
function onOk(){
alert('Form is OK');
}
function notOk(){
alert('Form Not OK');
}
this.$validator.validateAll().then(onOk, notOk);
}
}
});
如文档中所述,您必须进行以下更改:
- 只放
v-validate="'required|alpha|min:3'"
- 您可以添加
data-vv-delay="100"
以在 100 毫秒后或您认为合适的任何时间获取错误。
见下文 HTML :
<input name="FirstName" v-model="firstName" data-vv-delay="100" v-validate="'required|alpha|min:3'" class="form-control" type="text" id="firstName" placeholder="" v-bind:class="{ 'input': true, 'has-error': errors.has('FirstName') }" >
查看工作 bin。
我有一个非常基本的 VueJS 表单,我正在其中验证输入。
表单验证在初始调用验证表单方法时发生,并且在每个输入上显示适当的验证消息。
令我困惑的是,在vee-validate example for the forms上,点击提交按钮会调用验证,然后显示每个表单输入的错误消息。在输入中输入值后(比如在名称字段中),您可以清楚地看到该字段的验证错误和消息已被删除。
我提供了一个示例 JSBin 来说明我遇到的问题。
在输出面板上,单击“验证表单”按钮,您可以看到验证正在运行。但是一旦您在输入字段中输入了一些文本(即名字),验证就不再起作用,除非您再次明确单击“验证表单”按钮。这似乎与 Vee-Validate 表单上的行为不同。
我是否忽略或遗漏了什么?感谢任何关于可能导致问题的意见,因为我对 VueJS 还很陌生。
谢谢。
来自 JSBin 的代码:
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<title>JS Bin</title>
</head>
<body>
<div id="app" class="container">
<form class="form-horizontal" @submit.prevent="validateBeforeSubmit">
<div class="form-group">
<label class="control-label col-md-2 col-sm-4" for="firstName">First Name:</label>
<div class="col-md-5 col-sm-8" v-bind:class="{ 'has-error' : errors.has('FirstName') }">
<input name="FirstName" v-model="firstName" v-validate:firstName.initial="'required|alpha|min:3'" class="form-control" type="text" id="firstName" placeholder="" v-bind:class="{ 'input': true, 'has-error': errors.has('FirstName') }" >
<span v-show="errors.has('FirstName')" class="help-block error text-danger">{{ errors.first('FirstName') }}</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2 col-sm-4" for="lastName">Last Name:</label>
<div class="col-md-5 col-sm-8" v-bind:class="{ 'has-error' : errors.has('LastName') }">
<input name="LastName" v-model="lastName" v-validate:lastName.initial="'required|alpha|min:3'" class="form-control" type="text" placeholder="" v-bind:class="{ 'input': true, 'has-error': errors.has('lastName') }" >
<span v-show="errors.has('LastName')" class="help-block error text-danger">{{ errors.first('LastName') }}</span>
</div>
</div>
</form>
<a class="btn btn-success btn-md " v-on:click="validateBeforeSubmit">Validate Form</a>
<hr />
<pre>{{ errors }}</pre>
<pre>{{ fields }}</pre>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>
<script src="https://cdn.jsdelivr.net/vee-validate/2.0.0-beta.21/vee-validate.min.js"></script>
<script src="https://code.jquery.com/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</body>
</html>
JS
Vue.use(VeeValidate);
var app = new Vue({
el: '#app',
data: {
firstName: null,
lastName: null
},
methods:{
validateBeforeSubmit: function(){
function onOk(){
alert('Form is OK');
}
function notOk(){
alert('Form Not OK');
}
this.$validator.validateAll().then(onOk, notOk);
}
}
});
如文档中所述,您必须进行以下更改:
- 只放
v-validate="'required|alpha|min:3'"
- 您可以添加
data-vv-delay="100"
以在 100 毫秒后或您认为合适的任何时间获取错误。
见下文 HTML :
<input name="FirstName" v-model="firstName" data-vv-delay="100" v-validate="'required|alpha|min:3'" class="form-control" type="text" id="firstName" placeholder="" v-bind:class="{ 'input': true, 'has-error': errors.has('FirstName') }" >
查看工作 bin。