我使用jQuery验证插件的方式与Remember The Milk demo非常相似。
$("#registrationForm").validate({
rules: {
email: {
required: true,
email: true,
remote: '<%=Url.Action(...) %>'
},
},
messages: {
email: {
required: "Please enter an email address",
email: "Please enter a valid email address",
remote: jQuery.format("{0} is already in use")
}
});
第一次提交无效的电子邮件(例如bob@mail.com)时,错误消息与预期一致。但是,如果我输入另一封无效的电子邮件(例如sue@mail.com),验证插件仍会显示“bob@mail.com已在使用中。”
我已经跟踪了到达Url.Action
调用中指定的控制器的参数,它们肯定是正确的(即“sue@mail.com”作为电子邮件地址发送,当时输入的是字段)。
是否有其他人使用jQuery验证插件遇到此问题或类似问题?
答案 0 :(得分:2)
两年多以后,这个bug似乎还没有解决,所以这就是我发现的:
问题出在remote
函数:
remote: function(value, element, param) {
if ( this.optional(element) )
return "dependency-mismatch";
var previous = this.previousValue(element);
if (!this.settings.messages[element.name] )
this.settings.messages[element.name] = {};
previous.originalMessage = this.settings.messages[element.name].remote;
this.settings.messages[element.name].remote = previous.message;
// snip more code...
}
麻烦的是,在此函数的第二次及以后的评估中,messages[element.name].remote
包含特定的(文本)错误消息,并且实际的原始消息在{{1}时永远丢失之后会被覆盖。
我能够通过在该行之前添加一个检查来解决这个问题:
previous.originalMessage
我不确定这是否真的是正确的解决方案,但它确实有效 - 验证失败现在会在每次验证失败时重新应用格式化功能。
答案 1 :(得分:1)
Remember the Milk演示中的用户名字段以相同的方式失败(输入用户名'Peter'和'George'时),因此您可能在插件中发现了一个错误。