0

検証中にyiiフレームワークで境界線をフィールドセットに動的に設定する方法は?

失敗すると、fieldset の境界は赤に変わりますが、成功すると、fieldset の境界は緑に変わります。

入力のいずれかが失敗した場合、すべての要素が正しい場合、フィールドセットは失敗と成功を表示する必要があります..

<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

parent正しい要素にアクセスしていないだけです。試す:

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

また、jquery コードを yii に含める最善の方法は、 を使用することですCClientScriptregisterScript()そのため、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クラスがあるかどうかを確認することをお勧めします。

validateOnSubmitこのためにまたはは必要ありませんafterValidate

于 2012-10-15T10:57:25.613 に答える
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 に答える