0

我使用 jQuery 验证插件的方式与Remember The Milk 演示非常相似。

$("#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.Actioncall 中指定的控制器的参数,它们绝对是正确的(即,当在字段中输入时,“sue@mail.com”作为电子邮件地址发送)。

有没有其他人在使用 jQuery 验证插件时遇到过这个或类似的问题?

4

2 回答 2

2

两年多后,该错误似乎仍未修复,所以这是我发现的:

问题出在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包含一个特定的(文本)错误消息,并且在此之后被覆盖时实际的原始消息将永远丢失。previous.originalMessage

我可以通过在该行之前添加一个检查来解决这个问题:

if (!previous.originalMessage)
    previous.originalMessage = this.settings.messages[element.name].remote;

我不确定这是否真的是正确的解决方案,但它有效 - 验证失败现在在每次验证失败时重新应用格式函数。

于 2012-02-17T20:18:02.490 回答
1

记住牛奶演示中的用户名字段以同样的方式失败(输入用户名“Peter”和“George”时),因此您可能在插件中发现了一个错误。

于 2009-10-26T20:30:04.737 回答