【问题标题】:Why is the wrong field value shown in the error message when using jQuery (remote) validation?为什么使用jQuery(远程)验证时错误消息中显示错误的字段值?
【发布时间】:2009-10-26 20:00:11
【问题描述】:

我使用 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 验证插件时遇到过这个或类似的问题?

【问题讨论】:

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


    【解决方案1】:

    两年多过去了,这个错误似乎仍然没有修复,所以这是我发现的:

    问题出在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;
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 哦..谢谢,我不确定我可以使用哪些项目来测试以使错误发生在他们身上。
      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      相关资源
      最近更新 更多