Когда мы используем виджет CactiveForm следующим образом:
<?php echo $form->labelEx($model,'name'); ?> <?php echo $form->textField($model,'name'); ?> <?php echo $form->error($model,'name'); ?>
Мы получаем сообщения о проверке, но сами поля ввода – наше текстовое поле , не получаем никакого класса.
Я хочу, когда Yii проверяет, класс появляется в поле ввода, чтобы он мог отображать выделение.
CHtml::activeTextField
действительно делает это:
<?php echo CHtml::activeLabel($model,'name'); ?> <?php echo CHtml::activeTextField($model,'name') ?>
Любой способ сделать это с помощью CActiveForm ?
Добавлено:
$form=$this->beginWidget('CActiveForm', array( 'id'=>'event-form', 'enableClientValidation' => true, 'clientOptions'=>
Для класса ошибки по умолчанию, который должен быть присоединен, вам необходимо иметь структуру вашей формы, поскольку она находится в автоматически созданных формах по умолчанию, примерно так:
<div class="form"> <?php $form=$this->beginWidget('CActiveForm', array( ... )); ?> <div class="row"> <?php echo $form->labelEx($model,'name'); ?> <?php echo $form->textField($model,'name'); ?> <?php echo $form->error($model,'name'); ?> </div> ... </div>
Изменить: это inputContainer
для каждого поля ввода необходим inputContainer
, потому что это как css по умолчанию и реализация jquery.activeform.js по умолчанию . Чтобы изменить это поведение, мы можем просто добавить другое правило css в файл form.css по умолчанию, который по умолчанию добавляет ошибки только в div.form
внутри div.form
.
/* default css */ div.form div.error input, div.form div.error textarea, div.form div.error select, div.form input.error, div.form textarea.error, div.form select.error { background: #FEE; border-color: #C00; }
Таким образом, вы можете изменить это по своему вкусу, но минимальный размер будет:
div.error input, div.error textarea, div.error select {/* styles */}
Выполнить вышеуказанное не работает, и вы хотите назначить класс ошибки для ввода элементов отдельно, тогда вы можете использовать afterValidate
вызовы afterValidate
и afterValidateAttribute
клиентских приложений clientOptions
, где вам нужно будет добавить класс ошибки css к вводу, а также css, чтобы соответствовать таким входам:
input.error, textarea.error, select.error {/*styles*/}
Если вы используете какую-либо форму проверки клиента, как вы это делали раньше, перед вами необходимо addClass('error');
к вашим входам, с вышеуказанным css на месте.
Вы можете применить класс к элементу, используя параметр htmlOptions, который позволяет передавать атрибуты тегу. например:
<? php echo $form->textField($model, 'name', array('class'=>'textFieldClass')); ?>