使用jQuery(远程)验证时,为什么错误消息中显示了错误的字段值?

时间:2009-10-26 20:00:12

标签: jquery asp.net-mvc jquery-validate

我使用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验证插件遇到此问题或类似问题?

2 个答案:

答案 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'时),因此您可能在插件中发现了一个错误。