Почему неверное значение поля отображается в сообщении об ошибке при использовании jQuery (удаленной) проверки? - PullRequest
0 голосов
/ 26 октября 2009

Я использую плагин проверки 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.Action, и они определенно верны (то есть «sue@mail.com» отправляется как адрес электронной почты, когда это то, что вводится в поле) .

Кто-нибудь еще сталкивался с этой или подобной проблемой, используя плагин проверки jQuery?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Спустя два года ошибка все еще не исправлена, вот что я нашел:

Проблема в функции 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...
}

Проблема в том, что при 2-й и последующих оценках этой функции messages[element.name].remote содержит конкретное (текстовое) сообщение об ошибке, а фактическое оригинальное сообщение теряется навсегда, когда previous.originalMessage перезаписывается после что.

Мне удалось обойти проблему, добавив проверку перед этой строкой:

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

Я не уверен, действительно ли это правильное решение, но оно работает - при сбоях проверки теперь повторно применяется функция форматирования при каждом сбое проверки.

1 голос
/ 26 октября 2009

Поле имени пользователя в демонстрационной версии "Помни о молоке" не работает точно так же (при вводе имен пользователей "Питер" и "Джордж"), поэтому вы, вероятно, обнаружили ошибку в плагине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...