2

当我们像这样使用 CactiveForm Widget 时:

<?php echo $form->labelEx($model,'name'); ?>
<?php echo $form->textField($model,'name'); ?>
<?php echo $form->error($model,'name'); ?>

我们收到验证消息,但是输入字段本身就是我们的textfield,没有得到任何类。

我希望,当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'=>
4

2 回答 2

1

对于要附加的默认错误类,您需要具有默认自动生成表单中的表单结构,如下所示:

<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每个输入字段,因为这就是jquery.activeform.js的默认 css 和默认实现的方式。要改变这种行为,我们可以简单地将另一个 css 规则添加到默认的form.css文件中,默认情况下只会将错误添加到div内部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 */}

如果上述方法不起作用并且您想将错误类单独分配给输入元素,那么您可以使用CActiveForm'safterValidate的和afterValidateAttribute回调,您需要将错误 css 类添加到输入中,并且还有一个 css 规则匹配这样的输入:clientOptions

input.error, textarea.error, select.error {/*styles*/}

如果您使用某种形式的客户端验证,就像您在 beforeValidate 中所做的那样,您需要addClass('error');使用上述 css 进行输入。

于 2012-06-26T19:36:31.880 回答
0

您可以使用 htmlOptions 参数将类应用于元素,该参数允许您将属性传递给标签。例如:

<? php echo $form->textField($model, 'name', array('class'=>'textFieldClass')); ?>
于 2012-06-26T17:36:34.560 回答