Страница 1 из 1
Контейнер для клиентской валидации
Добавлено: 2017.10.06, 13:38
BrusSENS
Собственно столкнулся с траблом, при использовании бутстрапа 4 версии и валидации форм. Невозможно изменить контейнер для применения класса ошибки. Расширение для бутстрапа не рассматриваю, т.к. используется кастом.
Есть идеи как заложить в js возможность смены контейнера?
P.S.: Пока приходит на ум вариант с указанием контейнера и его выбора через switch.
Re: Контейнер для клиентской валидации
Добавлено: 2017.10.06, 16:35
BrusSENS
Прикинул примерный вариант решения проблемы
ActiveForm.php
Код: Выделить всё
class ActiveForm
{
const VALIDATING_CSS_SELECTOR_INPUT = 'input';
const VALIDATING_CSS_SELECTOR_CONTAINER = 'container';
public $validatingCssSelector;
protected function getClientOptions()
{
$options = [
...
'validatingCssSelector' => $this->validatingCssSelector,
...
];
return array_diff_assoc($options, [
...
'validatingCssSelector' => self::VALIDATING_CSS_SELECTOR_CONTAINER,
...
]);
}
}
yii.activeForm.js
Код: Выделить всё
...
var defaults = {
...
validatingCssSelector: 'container',
...
};
...
var updateInput = function ($form, attribute, messages) {
...
var validatingSelector = undefined;
switch(data.settings.validatingCssSelector) {
case 'container':
validatingSelector = $container;
break;
case 'input':
validatingSelector = $input;
break;
default:
validatingSelector = $container;
break;
}
if (hasError) {
...
validatingSelector.removeClass(data.settings.validatingCssClass + ' ' + data.settings.successCssClass)
.addClass(data.settings.errorCssClass);
} else {
...
validatingSelector.removeClass(data.settings.validatingCssClass + ' ' + data.settings.errorCssClass + ' ')
.addClass(data.settings.successCssClass);
}
...
};
...
Использование ActiveForm
Код: Выделить всё
$form = ActiveForm::begin([
...
'validatingCssSelector' => ActiveForm::VALIDATING_CSS_SELECTOR_INPUT,
...
]);