以下の編集2をお読みください
クイズ用のフォームを動的に生成しています。質問と回答は、MySQL データベースから取得されます。フォーム上のコントロールの種類は、チェックボックス、ラジオ ボタン、およびテキスト ボックスです。
1) 関連するすべての質問に対してラジオ ボタンが選択されていることを確認します (デフォルトでは何も選択されていません)。2) 関連するすべての質問に対して、少なくとも 1 つのチェックボックスが選択されていることを確認します。3) テキストボックスに何かが入力されていることを確認します。
これを行う方法についていくつかの例を見つけましたが、フォームを動的に生成しているため、問題が発生しました。
フォーム生成に使用しているアルゴリズムは次のとおりです。
Loop to get Questions from Database
{
Store "Type" of Question in variable X (Type = Single Choice 'c' (Radio button), Multi Choice 'm' (Checkbox), User Entry 'u' (Textbox)
Loop to get Answers for current Question
{
Switch(X)
{
case 'c'
Load each answer into separate radio buttons, Name = Question number.
break
case 'm'
Load each answer into separate checkboxes, Name = Question number.
break
case 'u'
Place textbox, Name = Question number.
break
}
}
}
その後、データが送信され、MySQL に保存されます。
すべてのフォーム要素を POST から配列にロードし、それらに値があるかどうかを確認しようとしましたが、個々の要素に値があるかどうかを確認することに気付きました。これは私が探しているものではありません。
これには何が最善のアプローチでしょうか?正しい方向へのポインタは大歓迎です!
編集2:
jQuery.validate を使用して、ラジオ ボタンとテキスト ボックスのこの問題を解決することができました。このページのソースコードを例として使用しました。ただし、チェックボックスでは機能しません。(チェックボックスに使用したソースコードを自分のページに直接コピーしましたが、それでも機能しません。最初のチェックボックスのみが強調表示され、他のチェックボックスをクリックしても検証は削除されません。
これは私が彼のウェブサイトからコピーしたコードの一部です。
<fieldset>
<legend>Spam</legend>
<label for="spam_email">
<input type="checkbox" class="checkbox" id="spam_email" value="email" name="spam[]" required minlength="2">
Spam via E-Mail
</label>
<label for="spam_phone">
<input type="checkbox" class="checkbox" id="spam_phone" value="phone" name="spam[]">
Spam via Phone
</label>
<label for="spam_mail">
<input type="checkbox" class="checkbox" id="spam_mail" value="mail" name="spam[]">
Spam via Mail
</label>
<label for="spam[]" class="error">Please select at least two types of spam.</label>
</fieldset>
ここで何か不足していますか?私もコピーしておくべきだったものは他にありますか?(私のページにも両方のファイルが含まれています)