私は2つのことをするフォームを持っています:
- 名とメールアドレスをPHPに渡します。
- ユーザーが1つまたは2つ以上のデータセットを送信する場合に備えて、クリック時に新しい名前/メールフィールドのセットを動的に追加します。
すべてのユーザーが送信することを選択できるセットの正確な数がわからないため、データを配列でPHPに渡します(名前の後に[]を使用)。これにより、foreachループを使用して、常にすべてのデータセットを取得できます。理解を深めるためのコードを次に示します。
<form method="post" action="submit.php" id="formID">
<table width="100%" border="0" cellspacing="0" cellpadding="0" id="contacts">
<tr>
<td><label class="namelabel"><span>Friend's First Name:</span><input type="text" name="friendName[]" class="friendName" id="name1" /></label></td>
<td><label class="emaillabel"><span>Friend's Email:</span><input type="text" name="friendEmail[]" class="friendEmail" id="email1" /></label></td>
</tr>
</table>
<p class="addmore"><a href="#" id="addclick">Click Here To Send This To More Friends</a></p>
<input type="submit" value="Spread The News!" name="submit" />
</form>
<script language="javascript" type="text/javascript" src="include/jquery-1.3.2.min.js"></script>
<script language="javascript" type="text/javascript" src="include/jquery.validate.pack.js"></script>
<script type="text/javascript">
$(document).ready(function() {
fieldCount = 1;
$("#addclick").click(function(e){
e.preventDefault();
fieldCount+=1;
$('#contacts tr:last').after('<tr><td><label class="namelabel"><span>Friend\'s First Name:</span><input type="text" name="friendName[]" class="friendName" id="name' + fieldCount + '" /></label></td><td><label class="emaillabel"><span>Friend\'s Email:</span><input type="text" name="friendEmail[]" class="friendEmail" id="email' + fieldCount + '" /></label></td></tr>');
});
$("#formID").validate({
rules: {
"friendName[]": "required",
"friendEmail[]": "required email",
}
});
});
</script>
ただし、問題は、最初のfriendName[]とfriendEmail[]のみが送信時に検証されることです。検証を機能させるには、同じ名前の他のフィールドをクリックする必要があります(怠惰な検証がフォーカスの後にのみ開始されるように)
フォームフィールドに同じ名前を使用して、それらすべてを同時に検証するにはどうすればよいですか?