VueJS Vee-Validate验证不会在输入上发生

时间:2017-01-31 14:13:05

标签: javascript validation vuejs2

我有一个非常基本的VueJS表单,其中我正在验证输入。

表单验证在初始调用validate表单方法时发生,并在每个输入上显示相应的验证消息。

我感到困惑的是,在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);
    }
  }
});

1 个答案:

答案 0 :(得分:3)

正如文档中所述,您必须进行以下更改:

  1. 仅放v-validate="'required|alpha|min:3'"
  2. 您可以添加data-vv-delay="100"以在100毫秒之后或您认为合适的任何时间获取错误。
  3. 请参阅以下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