Мне так и не удалось сделать способ работы по умолчанию.Похоже, что в JQuery он запускает только те методы проверки, которые зарегистрированы в JQuery.validator.
Первоначально я делал что-то вроде этого ...
jQuery.validator.unobtrusive.adapters.add("equaltopropertyvalidation", ["param"], function (rule)
{
alert("attaching custom validation adapter.");
rule.rules["equaltopropertyvalidation"] = rule.params.param;
rule.messages["equaltopropertyvalidation"] = rule.message;
return function (value, element, param)
{
alert("now validating!");
return value == this.currentForm[param].value;
};
});
Но мое второе предупреждение (теперь проверка!) никогда не будет стрелять, хотя первый будет.Я видел эту статью, но я не решался ее реализовать, потому что это требует от меня дополнительных действий, но я был ленив.
Хорошо, потратив много времени, чтобы выяснить, в чем делоЯ реализовал это так, как предлагает эта статья, и это работает.Теперь это так, и это работает.
<script type="text/javascript">
jQuery.validator.addMethod("equaltopropertyvalidation", function (value, element, param)
{
return value == this.currentForm[param].value;
});
jQuery.validator.unobtrusive.adapters.add("equaltopropertyvalidation", ["param"], function (rule)
{
rule.rules["equaltopropertyvalidation"] = rule.params.param;
rule.messages["equaltopropertyvalidation"] = rule.message;
});
</script>
Если вам нравятся подробности, то вот оно: посмотрите в jquery.validate.js и найдите
check: function (element)
Это функцияон запускается, чтобы проверить, является ли поле действительным или нет, запустив все применимые правила на поле.Теперь сначала он создает массив или правила для запуска.Это делается с использованием следующего кода.
var rules = $(element).rules();
Затем он перебирает коллекцию правил, создает элемент правила для каждого элемента в коллекции и затем пытается найти соответствующий метод для запуска этого правила.Как только метод найден, он запускается.Для этого используется следующий код.
var result = $.validator.methods[method].call(this, element.value.replace(/\r/g, ""), element, rule.parameters);
Теперь важно то, что если ваш пользовательский метод не будет добавлен в коллекцию $ .validator.methods с использованием JQuery.validator.addMethod, ЭТО НЕ БУДЕТ НАЙДЕНО, даже если он находится там, в коллекции JQuery.validator.unobtrusive.adapters.
Может быть способ выполнить эту работу без использования JQuery.validator.addMethod (и если да, то кто-нибудь, пожалуйста, уточните)но я полагаю, именно поэтому второй подход работает, а первый - нет.
Я использовал следующие версии файлов Jquery
- JQuery: 1.6 / 1.7.1
- Jquery.Validate: 1.9.0
- JQuery.Unobtrusive.Validate: взято из Microsoft CDN 2/14/2012.