我正在使用带有验证程序插件的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并通过该引用调用默认验证器之前,在外部存储对该函数的引用没有区别。

我真正需要做的是能够通过值而不是通过引用复制默认的必需验证器函数。但是经过大量的搜索,我不知道该怎么做。是否有可能?

如果不可能,那么我可以复制原始功能的源代码。但这会带来维护问题,除非没有“更好的方法”,否则我不愿意这样做。

最佳答案



那正是应该起作用的。

jQuery.validator.methods.oldRequired = jQuery.validator.methods.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.oldRequired(value, element, param);
}, jQuery.validator.messages.required);

这也应该工作:(并且this的问题已解决)
var oldRequired = jQuery.validator.methods.required;
jQuery.validator.addMethod("required", function(value, element, param) {
    // handle comboboxes with empty guids
    if (someTest(element)) {
        return myRequired(value, element, param);
    }
    return oldRequired.call(this, value, element, param);
    // return jQuery.oldRequired.apply(this, arguments);
}, jQuery.validator.messages.required);

关于javascript - 我可以在JavaScript中复制/克隆功能吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/447658/

10-09 22:30