2012-06-26 95 views
2

当我们使用CactiveForm的Widget是这样的:有没有办法让Yii 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'=> 
+0

一个类确实出现,错误。你到底在说什么? –

+0

@ bool.dev非常感谢。在内联客户端验证时,当使用'echo $ form-> textField($ model,'name');' - 这可能是其他内容时,我无法在输入字段中看到名为“error”的任何类?我唯一得到的是一个带有类的div:“errorMessage”,其中包含错误消息。 – MEM

+0

内联客户端验证在ajaxvalidation?你使用CActiveForm的clientOptions吗? –

回答

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,因为这就是默认的css和默认实现jquery.activeform.js是。要改变这种行为,我们可以简单地添加其它的CSS规则的默认form.css文件,在默认情况下只的divdiv.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's clientOptions,在afterValidate和​​回调,您需要将错误CSS类添加到输入,并且也有一个CSS规则匹配这样的输入:

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

柜面你使用某种形式的客户端验证的,就像你在beforeValidate已经做到了,你需要addClass('error');对您的输入,以代替上述的CSS。

+0

我不确定这可能是你的代码中的错误,但让我知道,这是如何工作的 –

+0

我已经尝试过,没有成功。我会在几个小时内回来,再试一次,让你知道。很多 – MEM

+0

好的。如果我把这个额外的无用div放在标记上,我确实会在该DIV上得到一个错误类,而不是输入。用CSS我们可以处理它。但是,额外的垃圾股真的很烦人。没有另外一种方法来在验证时在元素上添加一个类,而不会迫使我们弄脏我们的html? – MEM

0

您可以将一个类来使用htmlOptions参数,它允许您将属性传递给标签的元素。例如:

<? php echo $form->textField($model, 'name', array('class'=>'textFieldClass')); ?> 
+0

我不希望在元素上总是有类。我希望只有在验证发生时才有。 – MEM

相关问题