Укажите порядок валидаторов в плагине jQuery validate. - PullRequest
6 голосов
/ 15 апреля 2011

Мне интересно, можно ли указать порядок запуска валидаторов.

В настоящее время я написал собственный валидатор, который проверяет, является ли он [a-zA-Z0-9] +, чтобы убедиться, что логин проверяет наши правила, и удаленный валидатор, чтобы убедиться, что логин доступен, но в настоящее время удаленный валидатор запущен до моего пользовательского валидатора. Я хотел бы запустить удаленный валидатор, только если элемент проверяет мой пользовательский валидатор.

Любая подсказка?

спасибо за чтение

Ответы [ 4 ]

3 голосов
/ 16 апреля 2011

Вам необходимо увеличить / заменить / исправить / перезаписать (какой термин имеет для вас наибольшее значение) $.fn.rules, который используется плагином проверки при создании правил для поля, чтобы вывести ваше правило на второе место в правилах.объект, после правила required.

Если вы ищете rules в скрипте, вам нужно добавить аналогичную логику к этому непосредственно перед if (data.required)

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

Или вы можете скопировать секцию rules, добавить вышеприведенное и поместить ее в скрипт, на который ссылаются после скрипта validate.Таким образом, если сценарий изменится, вам не придется применять эти изменения к новой версии сценария (при условии, что правила будут работать так же).

0 голосов
/ 13 июля 2018

прошло много времени с момента последнего сообщения, но это может быть полезно для кого-то ...

, если вы хотите установить больше правил для одного тега, например

<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);             
});

Я надеюсь, что этоВам пригодится

м.

0 голосов
/ 07 февраля 2015

Насколько я понимаю, правила для данного элемента обрабатываются в порядке их появления. А начиная с версии 1.12 , правило «required» всегда обрабатывается первым, а «remote» последним.

0 голосов
/ 15 апреля 2011
  • Вы можете использовать event.preventDefault();, чтобы остановить событие проверки по умолчанию.http://api.jquery.com/event.preventDefault/

  • , затем запустите пользовательский валидатор

  • , затем запустите валидатор по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...