Пошаговая валидация формы на клиенте

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
quasar
Сообщения: 107
Зарегистрирован: 2014.10.22, 09:27

Пошаговая валидация формы на клиенте

Сообщение quasar » 2019.07.17, 14:42

Здравствуйте. Как в yii2 можно вызвать по клику валидацию конкртеного поля а не всей формы на клиенте. Задача была поставлена разбить форму на шаги. Ну я пошел методом разделения формы на бутстраповские табы. Теперь при переключении таба мне надо провалидировать поля которые находятся на данном этапе. Как вызвать валидацию всей формы понятно, а вот как вызвать валидацию конкретного поля по клику на какой то элемент не совсем понятно. Буду благодарен если подскажете.

masson
Сообщения: 497
Зарегистрирован: 2012.07.03, 15:59

Re: Пошаговая валидация формы на клиенте

Сообщение masson » 2019.07.17, 15:45

Как в yii2 можно вызвать по клику валидацию конкртеного поля а не всей формы на клиенте.
"На клиенте" имеется в виду JavaScript?

Предлагаются варианты :
Если требуется 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

quasar
Сообщения: 107
Зарегистрирован: 2014.10.22, 09:27

Re: Пошаговая валидация формы на клиенте

Сообщение quasar » 2019.07.17, 16:18

masson писал(а):
2019.07.17, 15:45

"На клиенте" имеется в виду JavaScript?

Нужна просто валидация на JavaScript. Дело в том что по правилам валидации ActiveForm уже создает правила валидации в JavaScript и например при потере фокуса на поле срабатывает проверка этого поля. А мне по сути надо по клику на кнопку перечислить набор полей для который должна пройти валидация. Но я не знаю как вызвать валидацию определенного поля. Логически можно попытаться разобрать код который генерит ActiveForm и посмотреть что происходит при потере фокуса на поле. Но так как я не сильный специалист яваскриптах, и плюс каша внутри этого кода я не знаю к чему прицепиться... Как провалидировать всю форму по клику на сабмит примеров полно. А вот как выполнить скрипт по отдельным полям вот это проблема.

masson
Сообщения: 497
Зарегистрирован: 2012.07.03, 15:59

Re: Пошаговая валидация формы на клиенте

Сообщение masson » 2019.07.17, 16:42

Выбрать Jquery коллекцию всех инпутов на табе и запустить в цикле each
$('#form').yiiActiveForm('validateAttribute', 'input-id');

quasar
Сообщения: 107
Зарегистрирован: 2014.10.22, 09:27

Re: Пошаговая валидация формы на клиенте

Сообщение quasar » 2019.07.17, 16:45

masson писал(а):
2019.07.17, 16:42
Выбрать Jquery коллекцию всех инпутов на табе и запустить в цикле each
$('#form').yiiActiveForm('validateAttribute', 'input-id');
Спасибо попробую!

quasar
Сообщения: 107
Зарегистрирован: 2014.10.22, 09:27

Re: Пошаговая валидация формы на клиенте

Сообщение quasar » 2019.07.17, 17:45

masson писал(а):
2019.07.17, 16:42
Выбрать Jquery коллекцию всех инпутов на табе и запустить в цикле each
$('#form').yiiActiveForm('validateAttribute', 'input-id');
Еще вопрос как определить прошло поле валидацию или нет? Потому что в условии переключения таба надо ориетироваться на то прошли поля валидацию или нет. Смотрю что возвращает console.log($('#w0').yiiActiveForm('validateAttribute', 'submitorderform-firstname')); возвращается undefined в любом случает. Тоесть по идее функция ничего не возвращает или надо к какому то другому методу обращатся...

masson
Сообщения: 497
Зарегистрирован: 2012.07.03, 15:59

Re: Пошаговая валидация формы на клиенте

Сообщение masson » 2019.07.17, 17:53

https://github.com/yiisoft/yii2/blob/ma ... m.js#LC143
Статус меняется у атрибутов

В дебагере браузера смотрите как до них добраться

quasar
Сообщения: 107
Зарегистрирован: 2014.10.22, 09:27

Re: Пошаговая валидация формы на клиенте

Сообщение quasar » 2019.07.17, 19:04

masson писал(а):
2019.07.17, 17:53
https://github.com/yiisoft/yii2/blob/ma ... m.js#LC143
Статус меняется у атрибутов

В дебагере браузера смотрите как до них добраться
Спасибо!

Ответить