大きなフォームで jQuery Validate プラグインを使用しており、require_from_group メソッド (以前に投稿した後) を使用して、3 つのチェックボックスのグループから少なくとも 1 つがチェックされていることを確認しています。
ただし、他のルールが機能しなくなるという問題に遭遇しました。提案されたパッチを適用しましたが、それも正しく機能していないようです (上記の GitHub の問題で述べたように)。
したがって、この 3 つのチェックボックス フィールドのグループを検証する別の方法を見つける必要があります (フォームには検証を必要としないチェックボックス フィールドが他にもあるため、この 3 つのチェックボックスのグループを具体的にターゲットにする必要があることに注意してください)。どこから始めればよいかわかりません。jQuery 検証コードに何らかのカスタム ルールを追加する必要があると考えていますが、どこから始めればよいかわかりません。アドバイスをいただければ幸いです。
これが私の開始HTMLです(この質問の本質的な部分を取り除いています):
<form class="my_form" method="post" action="/" >
<div><ul class="form_errors"></ul></div>
<label><input class="my_checkbox_group" id="my_checkbox_1" name="my_checkbox_1[]" type="checkbox" value="Yes"> My checkbox 1</label>
<label><input class="my_checkbox_group" id="my_checkbox_2" name="my_checkbox_2[]" type="checkbox" value="Yes"> My checkbox 2</label>
<label><input class="my_checkbox_group" id="my_checkbox_3" name="my_checkbox_3[]" type="checkbox" value="Yes"> My checkbox 3</label>
<input type="submit" value="Submit" />
</form>
これが私の開始JSです(これにより、3つのチェックボックスすべてが必須になりますが、3つのうち少なくとも1つだけをチェックしたいです):
$(".my_form").validate({
errorLabelContainer: ".form_errors",
wrapper: "li",
rules: {
'my_checkbox_1[]': { required: true },
'my_checkbox_2[]': { required: true },
'my_checkbox_3[]': { required: true }
},
messages: {
'my_checkbox_1[]': "This field is required",
'my_checkbox_2[]': "This field is required",
'my_checkbox_3[]': "This field is required"
}
});
編集 1:申し訳ありませんが、各チェックボックスの name 属性が同じであってはならないことを追加する必要がありました。これらの名前は CMS の特定のカスタム フィールド名にマップされるため、それらがすべて同じであると、フォームが送信されたときにフィールドの値が正しく保存されません。これが、 jQuery Validate デモ ページの 2 番目の例に従わなかった理由でもあります。