Я использую 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);
Я посмотрел исходный код для валидаторов, и реализация по умолчанию «required» определена как анонимный метод в jQuery.validator.messages.required. Так что нет другой (неанонимной) ссылки на функцию, которую я могу использовать.
Внешнее сохранение ссылки на функцию перед вызовом addMethod и вызовом валидатора по умолчанию через эту ссылку не имеет значения.
Что мне действительно нужно сделать, так это уметь копировать требуемую функцию валидатора по умолчанию по значению, а не по ссылке. Но после долгих поисков я не могу понять, как это сделать. Возможно ли это?
Если это невозможно, тогда я могу скопировать источник для исходной функции. Но это создает проблему обслуживания, и я бы не стал этого делать, если нет «лучшего способа».