Пошаговая валидация формы на клиенте
Пошаговая валидация формы на клиенте
Здравствуйте. Как в yii2 можно вызвать по клику валидацию конкртеного поля а не всей формы на клиенте. Задача была поставлена разбить форму на шаги. Ну я пошел методом разделения формы на бутстраповские табы. Теперь при переключении таба мне надо провалидировать поля которые находятся на данном этапе. Как вызвать валидацию всей формы понятно, а вот как вызвать валидацию конкретного поля по клику на какой то элемент не совсем понятно. Буду благодарен если подскажете.
Re: Пошаговая валидация формы на клиенте
"На клиенте" имеется в виду JavaScript?Как в yii2 можно вызвать по клику валидацию конкртеного поля а не всей формы на клиенте.
Предлагаются варианты :
Если требуется Ajax-валидация (для контроля уникальности к-л полей)
1. Для каждой страницы создать в модели отдельный сценарий и назначить ему набор полей
2. Сами табы спрятать. Внтури каждого таба рисовать форму и 2 кнопки (Prev & Next) + скрытое поле с именем сценария
3. По кнопке Next (submit) отправлять запрос на ajax-валидацию.
4. На уровне yiiActiveForm ловить событие ajaxComplete и смотреть что пришло. Если все ОК - переводить на след таб.
Если ajax-валидация не требуется, я делал почти то же самое, только используя плагин jquery.validate.js (вся валидация только на клиенте, сценариев не нужно, запросов при смене табов тоже)
На последнем шаге - var data = $("#page1_form").serialize() + "&" + $("#page2_form").serialize() + "&" + $("#page3_form").serialize();
потом ajax запрос и window.location.href
Re: Пошаговая валидация формы на клиенте
Нужна просто валидация на JavaScript. Дело в том что по правилам валидации ActiveForm уже создает правила валидации в JavaScript и например при потере фокуса на поле срабатывает проверка этого поля. А мне по сути надо по клику на кнопку перечислить набор полей для который должна пройти валидация. Но я не знаю как вызвать валидацию определенного поля. Логически можно попытаться разобрать код который генерит ActiveForm и посмотреть что происходит при потере фокуса на поле. Но так как я не сильный специалист яваскриптах, и плюс каша внутри этого кода я не знаю к чему прицепиться... Как провалидировать всю форму по клику на сабмит примеров полно. А вот как выполнить скрипт по отдельным полям вот это проблема.
Re: Пошаговая валидация формы на клиенте
Выбрать Jquery коллекцию всех инпутов на табе и запустить в цикле each
$('#form').yiiActiveForm('validateAttribute', 'input-id');
$('#form').yiiActiveForm('validateAttribute', 'input-id');
Re: Пошаговая валидация формы на клиенте
Еще вопрос как определить прошло поле валидацию или нет? Потому что в условии переключения таба надо ориетироваться на то прошли поля валидацию или нет. Смотрю что возвращает console.log($('#w0').yiiActiveForm('validateAttribute', 'submitorderform-firstname')); возвращается undefined в любом случает. Тоесть по идее функция ничего не возвращает или надо к какому то другому методу обращатся...
Re: Пошаговая валидация формы на клиенте
https://github.com/yiisoft/yii2/blob/ma ... m.js#LC143
Статус меняется у атрибутов
В дебагере браузера смотрите как до них добраться
Статус меняется у атрибутов
В дебагере браузера смотрите как до них добраться
Re: Пошаговая валидация формы на клиенте
Спасибо!masson писал(а): ↑2019.07.17, 17:53 https://github.com/yiisoft/yii2/blob/ma ... m.js#LC143
Статус меняется у атрибутов
В дебагере браузера смотрите как до них добраться