После дальнейших исследований я обнаружил свою проблему. Кажется, что когда вы вызываете функцию validator.element внутри, она устанавливает свойство currentElements. Таким образом, вы меняете текущий проверяемый элемент.
Итак, чтобы решить мою проблему, я устанавливаю currentElements обратно на проверяемый элемент
$.validator.addMethod('lessthan', function (value, element, params) {
var greatElement, validator, less, greatText, isEqualValid, great;
greatElement = $(params[0]);
validator = $( greatElement[0].form ).validate();
validator.element(greatElement);
// THIS IS THE LINE ADDED
validator.currentElements = $(element);
// validate the current value
// missing for brevety
});
$.validator.unobtrusive.adapters.add('lessthan', ['compareto', 'isequalvalid'], function (options) {
var element = $(options.form).find('input[name=' + options.params['compareto'] + ']')[0];
options.rules['lessthan'] = [element, options.params['isequalvalid']];
options.messages['lessthan'] = options.message;
});
Конечно, вы можете получить предыдущие currentElements до вызова validator.element и установить его обратно после вызова.
Возможно, существует альтернатива группам, но кажется, что группы не поддерживаются с тегами html5, поэтому может быть сложнее реализовать.
ОБНОВЛЕНИЕ с правильным решением
Поскольку я не использую form.validate (настройки) и группы не поддерживаются тегами html5, мне пришлось реализовать альтернативное решение:
$(document).ready(function () {
$('[data-val-lessthan-groupname]').each(function () {
var validator = $(this.form).validate();
validator.groups[this.name] = $(this).data('val-lessthan-groupname');
validator.invalid[this.name] = true;
});
});
Так что в основном я устанавливаю имя группы для минимума и максимума. В готовом документе я получаю валидатор и устанавливаю для элемента формы имя группы. Также я устанавливаю, что элемент действителен, в противном случае проверка будет выполняться только после того, как элемент будет «проверен» (установить фокус в элементе управления и потерять фокус на нем или отправить) [Кажется, что группа была разработана только с required_from_groups в помните, что он проверяет другие поля, если они имеют измененное значение]