Я использую jQuery с плагином валидаторов. Я бы хотел заменить "обязательный" валидатор одним из своих. Это легко:
jQuery.validator.addMethod("required", function(value, element, param) {
return myRequired(value, element, param);
}, jQuery.validator.messages.required);
До сих пор так хорошо. Это прекрасно работает. Но то, что я действительно хочу сделать, это вызвать мою функцию в некоторых случаях, а валидатор по умолчанию - для остальных. К сожалению, это оказывается рекурсивным:
jQuery.validator.addMethod("required", function(value, element, param) {
// handle comboboxes with empty guids
if (someTest(element)) {
return myRequired(value, element, param);
}
return jQuery.validator.methods.required(value, element, param);
}, jQuery.validator.messages.required);
Я посмотрел исходный код для валидаторов, а реализация по умолчанию "требуется" определяется как анонимный метод в jQuery.validator.messages.required. Таким образом, нет другой (не анонимной) ссылки на функцию, которую я могу использовать.
Сохранение ссылки на функцию извне перед вызовом addMethod и вызовом валидатора по умолчанию через эту ссылку не имеет значения.
Мне действительно нужно сделать, чтобы иметь возможность копировать требуемую по умолчанию функцию валидатора по значению, а не по ссылке. Но после довольно многого поиска я не могу понять, как это сделать. Возможно ли это?
Если это невозможно, я могу скопировать источник исходной функции. Но это создает проблему обслуживания, и я бы предпочел не делать этого, если нет "лучшего способа".