Плагин проверки jQuery - Использование validator.addMethod в цикле - PullRequest
0 голосов
/ 29 апреля 2010

У меня есть большое количество регулярных выражений, используемых для проверки.Вместо того, чтобы вручную вводить много addMethods для каждого регулярного выражения, я попытался использовать цикл.У меня есть смоделированная ниже структура для хранения имени регулярного выражения, объекта RegExp и сообщения проверки.

function RegExs(exprName, expr, exprVM) {
    this.exprName = exprName;
    this.expr = expr;
    this.exprVM = exprVM;
}

После заполнения массива из вышеперечисленного я перебираю и выполняю addMethods, чтобы упростить обновлениеи поддерживайте:

for (i in pgRegExs) {

    $.validator.addMethod(pgRegExs[i].exprName,
        function(value, element) {
            return this.optional(element) || pgRegExs[i].expr.test(value);
        },
        function(value, element) { return pgRegExs[i].exprVM; }
    );
}

Однако валидатор, похоже, не принимает регулярное выражение.Это действительно получает имя и сообщение проверки.Любые подсказки?

Обновление: Исправление: Валидатор выбирает массив функций, но последний в массиве применяется к каждому входу.Поэтому, если у меня есть:

pgRegExs = [
  new RegExs("addrCustName", regExAddrCustName, regExAddrCustNameVM),
  new RegExs("addrStreet", regExZipCodeLng, regExZipCodeLngVM),
  new RegExs("addrCity", regExZipCodeLng, regExZipCodeLngVM),
  new RegExs("zipcodeLng", regExZipCodeLng, regExZipCodeLngVM),
  new RegExs("emailFormat", regExEmailAddr, regExEmailAddrVM),
  new RegExs("emailLength", regExEmailAddrLen, regExEmailAddrLenVM)
];

Регулярное выражение emailLength применяется ко всем входным данным.Ниже, addrCustName должно быть применено к полю ввода, но вместо него используется emailLength.

$("[id$='_tbFName']").rules("add",
    {
        required: true,
        addrCustName: true,
        messages: {
            required: "First name required",
            addrCustName: function(value, element) { return regExAddrCustNameVM; }
        }
    }
);

1 Ответ

0 голосов
/ 07 мая 2010

Мне нужно было использовать замыкание:

for (i in pgRegExs) {

    (function(pgRegEx) {

        $.validator.addMethod(pgRegEx.exprName,
            function(value, element) {
                return this.optional(element) || pgRegEx.expr.test(value);
            },
            function(value, element) { return pgRegEx.exprVM; }
        );

     })(pgRegExs[i]);

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