HTML部分を修正することから始めました。クラスを追加しましたが、さらに重要なことは、入力にデータセットを追加したことです。
<form id="inviteForm" action="" method="POST">
<table>
<tr class="sets set-1">
<td>Name: <input data-set="1" class="input-name" name="name_1" type="text" value=""/></td>
<td>E-mail: <input data-set="1" class="input-email" name="email_1" type="text" value=""/></td>
</tr>
<tr class="sets set-2">
<td>Name: <input data-set="2" class="input-name" name="name_2" type="text" value=""/></td>
<td>E-mail: <input data-set="2" class="input-email" name="email_2" type="text" value=""/></td>
</tr>
<tr class="sets set-3">
<td>Name: <input data-set="3" class="input-name" name="name_3" type="text" value=""/></td>
<td>E-mail: <input data-set="3" class="input-email" name="email_3" type="text" value=""/></td>
</tr>
<tr class="sets set-4">
<td colspan="2"><input type="submit" value="Finish"/></td>
</tr>
</table>
</form>
また、TR にクラスを追加しました。これは便利なテクニックです。$(".sets") ですべての TR を呼び出すか、$(".set-1") で特定の TR を呼び出すことができます。これがなぜ便利なのか、以下で説明します。
次に、ルールのデフォルト変数を宣言しました。
var defaultrules = {
name: {
required: true,
minlength: 2,
maxlength: 50,
messages: {
required: "*",
minlength: jQuery.format("Min. {0} characters"),
maxlength: jQuery.format("Max. {0} characters")
}
},
email: {
required: true,
email: true,
minlength: 5,
maxlength: 150,
messages: {
required: "*",
email: "Invalid format",
minlength: jQuery.format("Min. {0} characters"),
maxlength: jQuery.format("Max. {0} characters")
}
}
}
最後に、私は変更のインプットを聞きました。入力が変更されたとき、単純にルールをバリデーションに追加しました
$("#inviteForm input").on("change", function() {
var ele = $(this);
// Get the set!
cur_set = ele.data("set");
// Is it filled?
if (ele.val().length > 0) {
// Add the rules to the current set, to the corresponding inputs
$(".set-"+cur_set).find(".input-name").rules('add', defaultrules.name)
$(".set-"+cur_set).find(".input-email").rules('add', defaultrules.email)
}
})
動作中の jsFiddle は次のとおりです: http://jsfiddle.net/maktouch/DC8eJ/1/