我正在重写jQuery验证器的亮点& unhighlight方法 - 但我希望继续调用方法的'stock'版本。在C#中,这就像调用base.unhighlight一样。
目前,我被迫复制&粘贴原始代码,从而模拟对父母的调用。
jQuery.validator.setDefaults({
unhighlight: function (element, errorClass, validClass) {
// base.unhighlight(element, errorClass, validClass) // <-- desired functionality
...
我该怎么做呢?非常感谢 -
答案 0 :(得分:3)
当然,正如您所建议的那样,另一种方法是从源中复制默认值。事实证明,这可能是一种更聪明的方法,因为正如我在其他答案中所说,你应该只需要调用一次setDefaults。
我不确定你对jQuery / JS的熟悉程度。但通常情况下,您会在每次调用验证器时传入选项。
所以,如果我有三种形式,我可以这样做:
$('#form1').validate({
unhighlight: function(el, error, valid){ el.append('<div class="errormsg">Required for Form1</div>'); }
});
$('#form2').validate({
unhighlight: function(el, error, valid){ $(el).append('<div class="errormsg">Required for Form2</div>'); }
});
$('#form3').validate({
unhighlight: function(el, error, valid){ $(el).append('<div class="errormsg">Required for Form3</div>'); }
});
但如果我想全局更改突出显示方法,我可以这样做:
jQuery.validator.setDefaults({
highlight: function(el, error, valid){ $(el).siblings('.errormsg').remove; }
});
所以你真的应该只需要调用一次setDefaults方法。肯定复制粘贴一次也不会太难。
答案 1 :(得分:1)
按照这种结构的方式,这是你可以在不修改插件的情况下做的最好的事情。原因是,当你调用setDefault方法时,它会覆盖插件自己的默认副本。事实证明这很难解决,但我通过将默认对象分离出来来修复它。并制作一份副本以便参考。老实说,从插件源复制简单逻辑可能是目前更好的路径,因为你应该只为整个实现调用一次setDefaults。
查看我的提交here&amp; here。如果您愿意,请随意分叉。
基本上,现在你正在调用的函数有一个额外的参数,_orig(或任何你想要的)。同样适用于highlight
。
unhighlight: function (el, error, valid, _orig) {
_orig(el, error, valid); // runs directly from the defaults.
// do other stuff.
}
这是file
编辑:哇。该插件的范围是waayy高级。实现我的解决方案花了比我想象的更长的时间。这是一个有效的演示:http://jsfiddle.net/fjMFk/24/