Подтвердить что ты не робот

Как я могу динамически добавлять и удалять поля формы для проверки Parsley.js?

У меня есть форма ('#registrations'), которую я проверяю с помощью Parsley.js, и пока она работает нормально. Тем не менее, я пытаюсь динамически удалять поля формы и добавлять новые для проверки Parsley, в зависимости от того, что кто-то выбирает в раскрывающемся списке select ( "#manufacturer" ).

Вот моя разметка:

<select name="manufacturer" id="manufacturer" parsley-required="true" data-error-message="Please select a manufacturer.">

    <option value="apple">Apple</option>

    <option value="blackberry">Blackberry</option>

    <option value="htc">HTC</option>

    <option value="huawei">Huawei</option>

    <option value="lg">LG</option>

    <option value="motorola">Motorola</option>

    <option value="nokia">Nokia</option>

    <option value="samsung">Samsung</option>

    <option value="sony">Sony</option>

    <option value="sony-ericsson">Sony Ericsson</option>

</select>

Вот мой JS:

//init parsley
$('#registrations').parsley();

$('#manufacturer').change(function() {

        //define selected value
        var manufacturer = $(this).val();

        //destroy parsley
        $('#registrations').parsley('destroy');

        //remove all models selects from parsley validation
        //if someone has previously selected a different manufacturer
        $('#registrations').parsley('removeItem', '#apple-models');
        $('#registrations').parsley('removeItem', '#blackberry-models');
        $('#registrations').parsley('removeItem', '#htc-models');
        $('#registrations').parsley('removeItem', '#huawei-models');
        $('#registrations').parsley('removeItem', '#lg-models');
        $('#registrations').parsley('removeItem', '#motorola-models');
        $('#registrations').parsley('removeItem', '#nokia-models');
        $('#registrations').parsley('removeItem', '#samsung-models');
        $('#registrations').parsley('removeItem', '#sony-models');
        $('#registrations').parsley('removeItem', '#sony-ericsson-models');

        //add corresponding models select to parsely
        $('#registrations').parsley('addItem', '#'+manufacturer+'-models');

        //reinit parsley
        $('#registrations').parsley();

    });

Это не работает, но я не знаю почему.

4b9b3361

Ответ 1

Как только новое поле добавлено в Parsley, вам нужно добавить требуемое ограничение в это поле.

//add corresponding models select to parsely
$('#registrations').parsley('addItem', '#'+manufacturer+'-models');

//add required constraint 
$('#'+manufacturer+'-models').parsley('addConstraint', {
    required: true 
});

Обновление (10 апреля 2014 года)

Вышеупомянутые работы для Parsley.js 1.x, но не для Parsley 2.x.

Parsley 2.x не использует addItem, removeItem, addConstraint или removeConstraint.

Вместо этого Parsley 2.x автоматически обнаружит изменения в вашей форме на основе атрибутов данных, которые имеют каждый вход. В приведенном выше примере, если вы хотите добавить новый элемент в Parsley, вы должны сделать следующее:

//destroy parsley
$('form').parsley().destroy();

//set required attribute on input to true
$('input').attr('data-parsley-required', 'true');

//reinitialize parsley
$('form').parsley();

Аналогично, если вы хотите удалить элемент из Parsley, вы бы сделали:

//destroy parsley
$('form').parsley().destroy();

//set required attribute on input to false
$('input').attr('data-parsley-required', 'false');

//reinitialize parsley
$('form').parsley();

Ответ 2

У меня была эта проблема при работе с validates-if-empty, установленной в true. Просто установка этого параметра на false не имела никакого эффекта. Мне пришлось фактически удалить атрибуты. В поле проверки автоматически обнаружены изменения.

$('input').removeAttr('data-parsley-required');
$('input').removeAttr('data-parsley-validate-if-empty');