cbone
@cbone
Серверная инфраструктура

Как правильно настроить clientValidation в Yii 1.1.14?

Ребят, разъясните пожалуйста. Хочу валидировать формочку на стороне клиента (причем при валидации только добавлять класс .error корявому инпуту, не выводя сообщения об ошибках, поэтому $form->errorSummary и т.п. не добавляю в вид). Судя по документации понял, что необходимо передать TRUE параметру enableClientValidation примерно так:
$checkOrderForm = $this->beginWidget('CActiveForm', array(
     'id' => 'check-order-form',
     'stateful' => true,
     'enableClientValidation' => TRUE,
));

Но ничего не работает и JS-код валидации на странице нигде не появляется. Как вообще он должен появляться и в каком именно месте?

Правила в модели:
rules() {
        return array(
            // типы полей
            array('id, order_start_time, order_finish_time, order_status_id, boiler_id, price_boiler, price_delivery', 'numerical', 'integerOnly' => true),
            array('name, email, address_delivery', 'length', 'max' => 255),
            array('name', 'length', 'min' => 2),
            array('phone', 'length', 'max' => 25),
            array('phone', 'length', 'min' => 5),
            array('email', 'email'),
            // сценарий оставления заявки
            array('name, phone, email, boiler_id', 'required', 'on' => 'add'),
            // сценарий подтверждения заявки (через админку)
            array('name, phone, email, address_delivery, order_status_id, boiler_id, price_boiler, price_delivery', 'required', 'on' => 'confirm'),
            // сценарий проверки статуса заявки
            array('id', 'required', 'on' => 'check'),
}

На стороне сервера всё прекрасно валидируется и работает, уже который день бьюсь.
  • Вопрос задан
  • 3094 просмотра
Решения вопроса 1
@mikitachu
Для того, чтобы работала клиентская валидация, в форме обязательно должны быть вызовы CActiveForm::error() для всех полей, по которым нужна валидация, причем вне зависимости от того, нужно ли визуально отображать ошибки или нет. В последнем случае нужно еще добавить соответствующий параметр:
$checkOrderForm = $this->beginWidget('CActiveForm', array(
     'id' => 'check-order-form',
     'stateful' => true,
     'enableClientValidation' => TRUE,
     'clientOptions' => array(
          'hideErrorMessage'  => true,
     ),
));


Еще обратите внимание на то, что по умолчанию класс error вешается не на инпут, а на ближайшего родителя, подходящего под селектор, указанный в inputContainer все того же параметра clientOptions, по умолчанию это 'div'.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы