我从修改 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/