e_s_l
@e_s_l
Full-stack web developer

Yii2. Как сделать проверку на заполнение одного из двух обязательных полей?

Правило валидации:
...
[['field1', 'field2'], 'validateFields', 'skipOnEmpty' => false, 'skipOnError' => false],
...

Функция валидации:
public function validateFields($attribute, $params)
{
    // делаю очистку ошибок обоих полей (это не работает)
    $this->clearErrors('field1');
    $this->clearErrors('field2');
    // проверяю
    if (empty($this->field1) && empty($this->field2)) {
        // в первый input помещаю пустую ошибку (поля идут вертикальным списком)
        $this->addError('field1', '');
        // во второй инпут помещаю саму ошибку
        $this->addError('field2', 'At least one must not be blank.');
        return false;
    }
    return true;
}

У самой формы ActiveForm:
...
'enableAjaxValidation' => true,
'enableClientValidation' => false,
...

Суть проблемы. Поля пустые. Передаем фокус первому полю, затем второму, убираем фокус со второго - отрабатывает ajax-валидация, оба поля (по очереди) отмечены как has-error и появляется сообщение об ошибке. Передаем фокус первому полю, вводим данные, убираем фокус с поля, а ошибка продолжает висеть на втором поле. Как заставить форму "перевалидировать" одно поле при изменении значения другого поля?
  • Вопрос задан
  • 1437 просмотров
Решения вопроса 1
@coderlex
Дополните client-side валидатором.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы