我将 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 之前在外部存储对函数的引用并通过该引用调用默认验证器没有区别。
我真正需要做的是能够通过值而不是通过引用来复制默认所需的验证器函数。但经过相当多的搜索,我无法弄清楚如何做到这一点。是否可以?
如果不可能,那么我可以复制原始函数的源代码。但这会产生维护问题,除非没有“更好的方法”,否则我宁愿不这样做。