在jQuery validate插件中指定validation器的顺序

我想知道是否可以指定validation器的运行顺序。

目前我写了一个自定义validation器来检查它是否是[a-zA-Z0-9] +以确保登录validation我们的规则和远程validation器以确保登录可用但是当前远程validation器在我的自定义之前被激活validation器。 我想仅在元素validation我的自定义validation器时才启动远程validation器。

任何线索?

谢谢阅读

您需要增加/猴子补丁/覆盖(对您来说最合适的术语)validation插件在创建规则以运行字段以将规则推送到规则对象中的第二位时使用的$.fn.rules ,遵守规定。

如果您在脚本中搜索rules ,则需要在if (data.required)之前添加类似的逻辑

 If (data.yourRuleName) { var param = data.yourRuleName; delete data.yourRuleName; data = $.extend({ yourRuleName: param }, data); } 

或者您可以复制rules部分,添加上面的内容并将其放在validation脚本之后引用的脚本中。 这样,如果脚本发生更改,您将不必将这些更改应用于新版本的脚本(假设规则仍然以相同的方式工作)。

据我所知,给定元素的规则按它们出现的顺序处理。 从版本1.12开始 ,“必需”规则始终首先处理,“远程”最后处理。

自上一条消息以来已经有一段时间了,但它可能对某些人有用……

例如,如果要在同一标记上设置更多规则

  

当您测试规则时,顺序与插入的顺序不同,所以在这种情况下,这是一个问题,因为如果插入以下字符串

ABCDEFGHI

jqueryvalidation器打印这些消息

1)与minlength相关的第一错误消息2)与范围字相关的第二错误消息3)与正则表达式相关的第三错误消息

但这是错误的,因为如果我已经插入了字符串

ABCDEFGHI

并且出现的消息是mi​​nlength的错误消息,现在我插入另一个字符

abcdefghil – >长度10

在这一点上,我必须清理字符串,因为第二条错误消息告诉我,我必须插入至少两个或更多的单词……在[2,5]之间

插入两个或多个单词后,正则表达式的相同之处在于它将出现关于正则表达式的第三条错误消息,在这种情况下我还要清理我的字符串等…

此行为是由于jquery.validate.js中的方法列表

因为插件接受了这个命令……

所以,我的解决方案是这样的:

为您要在标记此属性上插入的每个规则添加

 data-rule-(method you want)-order 

并用零指数初始化它…

例如,在我们的例子中,我们有三个规则

  

此时,如果您不想覆盖库(jquery.validate.js),则可以创建custom.js文件并插入以下代码:


 $(document).ready(function() { (function($){ $.validator.dataRules = function(element) { rules = {}, $element = $( element ), type = element.getAttribute( "type" ), method, value, orderIndex, orderArr = {}; for ( method in $.validator.methods ) { value = $element.data( "rule" + method.charAt( 0 ).toUpperCase() +method.substring( 1 ).toLowerCase() ); orderIndex = $element.data( "rule" + method.charAt( 0 ).toUpperCase() +method.substring( 1 ).toLowerCase() + "Order" ); if(typeof orderIndex !== "undefined") orderArr[orderIndex] = {"rules":rules,"type":type, "method":method, "value":value}; } for ( var ord in orderArr ) this.normalizeAttributeRule( orderArr[ord].rules,orderArr[ord].type, orderArr[ord].method, orderArr[ord].value ); return rules; } })(jQuery); }); 

我希望它对你有用