JQuery.Validate добавление динамических правил с сообщениями - программирование
Подтвердить что ты не робот

JQuery.Validate добавление динамических правил с сообщениями

У меня есть форма, на которой я использую jquery.validate. Сначала я вызываю проверку с помощью набора правил и пользовательских сообщений...

$("#formName").validate( {
  rules: {
    myExistingInput: {
      required: true
    }
  },
  messages: {
    myExistingInput: {
      required: "Enter something"
    }
  },
  ignore: null, // include hidden fields (see below)
  submitHandler: function(form) {
    // do stuff
  },
  invalidHandler: function(event, validator) {
    // do stuff (some of the fields may have been hidden by a collapsible panel
    // if there is an error on one of those fields, expand the panel so the error
    // becomes visible)
  }
});

Позже я динамически добавляю поля в форму и добавляю правила для этих полей тоже...

$("#formName").append(...);

$("#newInputName").rules("add", {
  required: true,
  messages: {
    required: "Enter something else"
  }
});

Если я затем отправлю форму, я получаю сообщение об ошибке из jquery.validate...

Исключение произошло при проверке элемента newInputName, проверьте Метод 'messages'.TypeError: Невозможно получить свойство 'call' of undefined или нулевая ссылка

Отладка в браузере, я вижу, что ошибка вызывается из функции "проверка" и что для переменной "метод" задано "сообщения".

Если я удалю сообщения от вызова к правилам ( "добавить",...

$("#newInputName").rules("add", {
  required: true
});

он работает так, как ожидалось, но, очевидно, теперь у меня нет пользовательских сообщений об ошибках.

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

BTW: плагин проверки jQuery - v1.11.0 - 2/4/2013

4b9b3361

Ответ 1

Ваш код, кажется, работает без ошибок, поскольку вы его разместили.

DEMO с поддержкой DOM: http://jsfiddle.net/UZTnE/

DEMO с PageInit и jQuery Mobile: http://jsfiddle.net/xJ3E2/

$(document).on("pageinit", function () {

    $('#myform').validate({ // initialize the plugin
        rules: {
            field1: {
                required: true
            }
        },
        messages: {
            field1: {
                required: "Enter something"
            }
        }
    });

    $('[name*="field"]').each(function () {
        $(this).rules('add', {
            required: true,
            messages: {
                required: "Enter something else"
            }
        });
    });

});

HTML

<form id="myform">
    <input type="text" name="field1" />
    <input type="text" name="field2" />
    <input type="submit" />
</form>

BTW

...

ignore: null, // include hidden fields

должен быть...

ignore: [], // include hidden fields

Смотрите: jQuery Validate - включить проверку скрытых полей

Ответ 2

$(document).ready(function(){
  $("#controlId").rules("add", {
     required : true,
     messages : { required : 'field is required.' }
  });
});

Ответ 3

как ответ на эту старую проблему, мне это нравится, чтобы получить meassges внутри объекта rules.

После добавления правил вы можете добавлять такие сообщения:

var inputRules = $('input').rules();
inputRules.messages = {required: 'your message'};

введите описание изображения здесь

Удачи!