Таблица проверки ajax в yii2

У меня есть главная деталь формы для табличного ввода и с enabledAjaxValidation=true

Пока все хорошо, форма проверяет все правила и показывает сообщения об ошибках при отправке или изменении любого значения любого элемента управления (событие onchange). Проблема возникает, когда я добавляю элементы управления в форму с помощью ajax, последние ведут себя не так, как оригинальные, они не отображают сообщения об ошибках.

Таблица проверки ajax в yii2

То же самое, когда отправить с помощью кнопки я думаю что

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
98
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам необходимо добавить вновь созданное/добавленное поле в проверку вручную для любых динамически созданных входных данных с помощью функции yiiActiveForm.add().

Вы не добавили код, который используете в настоящее время, когда нажимаете кнопку и добавляете новый ввод в форму через ajax. Итак, что вам нужно сделать, это когда вы получите ответ и добавите ввод в форму, просто добавьте новый ввод, используя следующий код.

Примечание. Измените атрибуты формы и поля соответствующим образом.

$('#form-id').yiiActiveForm('add', {
    id: 'input-id',
    name: 'input-name',
    container: '.field-input',
    input: '#input-id',
    error: '.help-block',
    validate:  function (attribute, value, messages, deferred, $form) {
        yii.validation.required(value, messages, {message: "Validation Message Here"});
    }
});

Подробнее о проверка активной формы js

Обновлять

Если вы не хотите добавлять функцию проверки вручную для каждого ввода и у вас есть табличные вводы, вы можете получить доступ к любому из уже созданных подобных полей и привязать к нему функцию проверки.

Например, в приведенном выше примере, если поле name является табличным и принадлежит модели Contact, и у вас уже есть поле имени, заполненное в форме #contact-0-name, вы можете использовать функцию yiActiveForm.find() для доступа к атрибутам этого поля и назначить существующую проверку. см. пример ниже

var fieldAttributes = $("#form-id").yiiActiveForm("find", 'contact-0-name');
$('#form-id').yiiActiveForm('add', {
    id: 'contact-1-name',
    name: '[1][name]',
    container: '.field-name',
    input: '#contact-1-name',
    error: '.help-block',
    validate:  fieldAttributes.validate
});

используйте что-то вроде кода ниже

error: function(jqXHR,textStatus,errorThrown) {
                stopLoader('.modal-content');
                $('.csv_errors').show();
                if (jqXHR.status==422){      
                    var responseText = $.parseJSON(jqXHR.responseText);
                    $.each(responseText.errors,function(key,value){
                        $('.csv_error ul').append('<li>'+value+'</li>');
                    });
                }else{
                    var responseText = $.parseJSON(jqXHR.responseText);
                    $('.csv_error ul').append('<li>'+responseText.message+'</li>');
                }
            }

Другие вопросы по теме