прошло много времени с момента последнего сообщения, но это может быть полезно для кого-то ...
, если вы хотите установить больше правил для одного тега, например
<input data-rule-regex="(\w\d)+" data-rule-rangewords="[2,5]" data-rule-minlength="10" >
когда вы проверяете ваше правило, порядок не совпадает с порядком их вставки, поэтому в этом случае это проблема, потому что если вы вставите следующую строку
abcdefghi
jquery validator напечатает эти сообщения
1) первое сообщение об ошибке, относящееся к minlength 2) второе сообщение об ошибке, относящееся к диапазонным словам 3) третье сообщение об ошибке, относящееся к выражению регулярного выражения
, но оно неверно, потому что если я уже вставил строку
abcdefghi
и появившееся сообщение было сообщением об ошибке для минимальной длины, и теперь я вставляю еще один символ
abcdefghil -> длина 10
на этом этапеЯ должен очистить строку, потому что второе сообщение об ошибке говорит мне, что я должен вставить как минимум два слова или больше ... между [2,5] точно
и то же самое длярегулярное выражение после вставки двух или более слов о том, что появится третье сообщение об ошибке в регулярном выражении, а также в этом случае я должен очистить мою строку ect ...
это поведение связано со списком методов внутриjquery.validate.js
, потому что плагин принимает этот порядок ...
, поэтому мое решение таково:
положить для каждого правила, которое вы хотите вставить впометьте этот атрибут
data-rule-(method you want)-order
и инициализируйте его индексом с нуля ...
например, в нашем случае у нас есть три правила
<input
data-rule-regex="(\w\d)+" data-rule-regex-order="0"
data-rule-rangewords="[2,5]" data-rule-rangewords-order="1"
data-rule-minlength="10" data-rule-minlength-order="2"
ofcourse you need also the messages (if you want)
data-msg-regex="..." etc...
>
на данный моментЕсли вы не хотите переопределять библиотеку (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);
});
Я надеюсь, что этоВам пригодится
м.