0

如何在验证期间在 yii 框架中为字段集动态设置边框?

失败时 fieldset 的边框应该变成红色,而成功时 fieldset 的边框应该变成绿色..

如果任何一个输入失败,如果所有元素都正确,则 feildset 应该显示失败和成功。

<fieldset class="field">
<div class="visible column">
<div>
<?php echo $form->labelEx( $modelAddress, 'First Name'); ?>
 <?php echo $form->textField( $modelAddress, 'firstName'); ?> 
<div class="indicator">&nbsp;</div>
<?php echo $form->error( $modelAddress, 'firstName'); ?>
 </div>
</div>
</fieldset>

//My Script
<script>
$(document).ready(function()
{ $("input").each(function(){if ($(this).hasClass("error"))
 { $(this).parent().parent().parent().parent().addClass("fieldseterror");
}
}); 

</script>

//PHP
<?php
$form = $this->beginWidget( 'CActiveForm', array(
'id' => 'registration',
'enableAjaxValidation' => true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
'afterValidate' => 'js:checkErrors'
    ),'htmlOptions' => array( 'class' => 'vertical inner custom_frm_styl')));
?>
4

3 回答 3

1

您可以使用 jQuery。Yii 自动将非验证字段更改为具有类 .error,因此您可以检查任何表单字段是否具有类 .error 以更改您想要的任何内容,例如(未经测试):

<script>
    $(function(){
        $('#user-form').submit(function(){
            $("#user-form input").each(function(){
            if ($(this).hasClass("error")){
                    ...
                }
            });
        });
    });
</script>
于 2012-10-15T07:16:51.900 回答
1

我认为您可以使用 CActiveForm 的afterValidate属性。

$myform = $this->beginWidget('CActiveForm',array('id'=>'invoice-form',
    'enableClientValidation'=>true,
'clientOptions'=>array(
        'validateOnSubmit'=>true,
        'afterValidate' => 'js:checkErrors'
    )
));

<script type="text/javascript"> 
    function checkErrors(form, data, hasError) {
        if(!hasError) {
            $('.field').addClass("fieldseterror");
            //$(form).submit();
            return true;
        }
        else {
            //return false;
                }

    }
</script>
于 2012-10-15T10:16:21.893 回答
1

您只是没有访问正确的parent元素。尝试:

$(this).parent().parent().parent().addClass("fieldseterror");

在 yii中包含 jquery 代码的最好方法是使用CClientScript'sregisterScript(),所以在你的create.php中,添加:

Yii::app()->clientScript->registerScript('checkkk','
            $("input").each(function(){
                if ($(this).hasClass("error")) {
                    var parent_element = $(this).parent().parent().parent();
                    console.log(parent_element);
                    if (!parent_element.hasClass("fieldseterror"))
                        parent_element.addClass("fieldseterror");
                }
            });
'); // you can add this right before the call to renderPartial()

如您所见,我添加了一个console.log()调用来检查匹配的父元素。此外,最好fieldseterror在添加之前检查字段集是否已经具有该类。

你不需要validateOnSubmitor afterValidate, 为此。

于 2012-10-15T10:57:25.613 回答