Vuetifyのv-checkboxで最低一つ選択必須にするバリデーションの実装

2021/02/15に公開

はじめに

Vuetify でフォームを作ったときに v-checkbox を使いました。
チェックボックスを最低 1 つ選択必須にするバリデーションを掛けようとしたときに苦戦しましたので、バリデーションの方法について書きます。

個人的にいまいちだった方法

stack overflow のHow to validate checkbox group with Vuetifyにあった回答を参考にして、バリデーションを作りました。

チェックボックスを1つも選択していないときに、エラーメッセージが全てのチェックボックスに表示されてしまいます。
見た目がいまいち…!エラーメッセージは1つだけにしたい…!

バリデーション実装その1

v-checkboxhide-detailsを最後のチェックボックスのみfalse(他はtrue)にしています。
最後のチェックボックスかどうかの判断はisLastFruitメソッドでしています。

この方法はシンプルですが、最後のチェックボックスがdisabledになっている場合に、エラーメッセージの色が赤にならないのが微妙なポイントでした。(disabledを使わない場合は、この方法が良さそうです。)

バリデーション実装その2

v-checkboxhide-detailstrueにして、チェックボックスのエラーメッセージを非表示にしています。
選択したチェックボックスの値を入れているselectedValuesが空のとき、v-showで条件分岐してエラーメッセージが表示されるようにしています。

Discussion