覆盖jQueryvalidation突出显示/取消高亮显示方法

如果之前已经回答了道歉,我在搜索时无法挖掘任何东西。

我正在重写jQueryvalidation器的突出显示和unhighlight方法 – 但我希望继续调用方法的’stock’版本。 在C#中,这就像调用base.unhighlight一样。

就目前而言,我被迫复制并粘贴原始代码,从而模拟对父母的调用。

jQuery.validator.setDefaults({ unhighlight: function (element, errorClass, validClass) { // base.unhighlight(element, errorClass, validClass) // <-- desired functionality ... 

我该怎么做呢? 非常感谢 –

通过这种结构化的方式,这就是在不修改插件的情况下你可以做的最好的事情。 原因是,当你调用setDefault方法时,它会覆盖插件自己的默认副本。 事实certificate这很难解决,但我通过将默认对象分离出来并修复它来复制它来修复它。 老实说,从插件源复制简单逻辑可能是目前更好的路径,因为你应该只为整个实现调用一次setDefaults。

在这里和这里查看我的提交。 如果您愿意,请随意分叉。

基本上,现在你正在调用的函数有一个额外的参数,_orig(或任何你想要的)。 highlight同样如此。

 unhighlight: function (el, error, valid, _orig) { _orig(el, error, valid); // runs directly from the defaults. // do other stuff. } 

这是文件

编辑:哇。 该插件的范围是waayy高级。 实现我的解决方案花了比我想象的更长的时间。 这是一个有效的演示: http : //jsfiddle.net/fjMFk/24/

当然,正如您所建议的那样,另一种方法是从源中复制默认值。 事实certificate,这可能是一个更聪明的方法,因为正如我在其他答案中所说,你应该只需要调用一次setDefaults。

我不确定你对jQuery / JS的熟悉程度。 但通常情况下,您通过每次调用validation器传递选项。

所以,如果我有三种forms,我可以这样做:

 $('#form1').validate({ unhighlight: function(el, error, valid){ el.append('
Required for Form1
'); } }); $('#form2').validate({ unhighlight: function(el, error, valid){ $(el).append('
Required for Form2
'); } }); $('#form3').validate({ unhighlight: function(el, error, valid){ $(el).append('
Required for Form3
'); } });

但如果我想全局更改突出显示方法,我可以这样做:

 jQuery.validator.setDefaults({ highlight: function(el, error, valid){ $(el).siblings('.errormsg').remove; } }); 

所以你真的应该只需要调用一次setDefaults方法。 肯定复制粘贴一次也不会太难。