5

我正在使用 Vue.js,我是新手。我目前正在验证。我曾使用 vuelidate 作为我的验证库。我已经成功完成了表单验证,但是当我必须检查复选框的验证时出现了问题。

如何检查复选框的验证?另外,我使用 bootstrapvue 来显示复选框。

   <b-col lg="6" md="6" sm="6">
      <label>Bus Route</label>
      <b-form-group>
        <b-form-checkbox v-for="route in busRouteList"
                         v-model.trim="selectedRoute"
                         v-bind:value="route.value"
                         v-bind:unchecked-value="$v.selectedRoute.$touch()">
          {{route.text}}</b-form-checkbox>
      </b-form-group>
      <div class="form-group__message" v-if="$v.selectedRoute.error && !$v.selectedRoute.required">
        Field is required
      </div>
    </b-col>

validations: {

      selectedRoute: {
        required
      },
}
4

6 回答 6

15

由于 false 也是有效值,因此您应该尝试使用sameAs

import { sameAs } from 'vuelidate/lib/validators'

terms: {
   sameAs: sameAs( () => true ) 
}
于 2019-11-13T12:57:07.507 回答
5

您应该绑定 @change 方法:

 <b-form-checkbox v-for="route in busRouteList"
                         v-model.trim="selectedRoute"
                         v-bind:value="route.value"
                         @change="$v.selectedRoute.$touch()">

你可能想使用自定义功能:

selectedRoute: {
  checked (val) {
    return val
  }
},
于 2018-07-06T01:26:01.233 回答
2

我希望这个小例子能帮助你理解如何验证一个复选框。您必须检查输入何时更改。我建议您使用@change。

在模板中

<div class="input">
  <label for="country">Country</label>
  <select id="country" v-model="country">
    <option value="usa">USA</option>
    <option value="india">India</option>
    <option value="uk">UK</option>
    <option value="germany">Germany</option>
  </select>
</div>
<div class="input inline" :class="{invalid: $v.terms.$invalid}">
  <input type="checkbox" id="terms" v-model="terms" @change="$v.terms.$touch()">
  <label for="terms">Accept Terms of Use</label>
</div>

因此,如果所选国家/地区为德国,则条款将有效。

validations: {
  terms: {
    checked(val) {
      return this.country === "germany" ? true : val;
    }
  }
}

当然是国家,术语在 data() 中定义:

country:'',
terms: false
于 2019-06-02T16:22:12.057 回答
0

使用vuelidate-next(同时支持 Vue 2 和 Vue 3)它就像使用sameAs内置验证器true作为直接参数一样简单。例如,在方法内部使用时setup

const termsAccepted = ref(false)

const v$ = useVuelidate(
  { termsAccepted: { sameAs: sameAs(true) } },
  { termsAccepted }
)

return { v$, termsAccepted }
于 2021-02-22T14:44:00.683 回答
0

`

validations: {
    terms: {
        checked: (val) => {return val;}
    }
}

`

于 2021-04-07T18:38:07.493 回答
0

这对我有用。基本上,您需要将其值 'sameAs' 设置为布尔值 'true',这意味着复选框已被选中。所以,即:

privacyCheck: {
  sameAs: sameAs(true)
},
于 2021-09-17T15:47:14.717 回答