Как вручную перепроверить/запустить проверку, используя ненавязчивую проверку jQuery?

Я создал свой собственный атрибут условной проверки для проверки моей модели MVC как на клиенте, так и на сервере, наследуя RequiredAttributeи реализуя IClientValidatable. Идея состоит в том, что если логическое свойство моей модели истинно, то требуется другое свойство. В представлении это проявляется как флажок, который указывает, нужно ли заполнять текстовое поле.

Это работает отлично, за исключением случаев, когда пользователь выполняет следующие действия:

  • Ставит галочку (поле теперь обязательно ).
  • Отправляет форму (выполняется проверка на стороне клиента, отображается сообщение об ошибке ).
  • Пользователь снимает флажок (сообщение об ошибке остается, поле больше не требуется ).

Я хотел бы перепроверить форму, когда флажок установлен или снят, или, что еще лучше, просто перепроверить это поле, чтобы сообщение об ошибке больше не отображалось. Я пробовал различные комбинации вызова метода jQuery validate(), но, похоже, ничто не способно -повторно выполнить проверку.

Я использую следующий javascript для настройки функции проверки и связанного с ней ненавязчивого адаптера.

$.validator.addMethod(
    "requiredif",
    function(value, element, parameters) {
        var selector = "#" + parameters["dependentpropertyname"];
        var triggerValue = parameters["triggervalue"].toString().toLowerCase();
        var actualValue = $(selector).is(":checked").toString().toLowerCase();
        if (actualValue === triggerValue) return $.validator.methods.required.call(this, value, element, parameters);

        return true;
    });

$.validator.unobtrusive.adapters.add(
    "requiredif",
    ["dependentpropertyname", "triggervalue"],
    function(options) {
        options.rules["requiredif"] = {
            dependentpropertyname: options.params["dependentpropertyname"],
            triggervalue: options.params["triggervalue"]
        };
        options.messages["requiredif"] = options.message;
    }
);

Спасибо!

9
задан andrej351 18 July 2012 в 02:56
поделиться