2012-10-15 139 views
0

如何在yii框架中驗證時動態設置邊框到fieldset?在Yii框架驗證

如果失敗字段集的邊界應該變成紅色,而在成功字段集邊框應該變成綠色..

如果輸入的任何一個失敗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'))); 
?> 
+0

如果指示燈已激活,請將背景更改爲紅色 –

+0

我們必須使用find()和父級動態設置:但我無法修復。 – janani

+0

您是否嘗試使用客戶端表單驗證? – Sergey

回答

1

您可以使用jQuery。 Yii的自動改變非驗證領域有類.error,這樣你就可以檢查是否有任何形式的字段具有類.error改變任何你想要的,如(未經測試):

<script> 
    $(function(){ 
     $('#user-form').submit(function(){ 
      $("#user-form input").each(function(){ 
      if ($(this).hasClass("error")){ 
        ... 
       } 
      }); 
     }); 
    }); 
</script> 
+0

我試了一下..其不工作 – janani

+0

對不起,應該在表格上提交,會更新 –

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> 
+0

不適用於我:( – janani

1

你只是沒有訪問正確的parent元素。嘗試:

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

也是最好的辦法,包括jQuery代碼在警予是使用CClientScript's registerScript(),所以在您的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()調用來檢查匹配的父元素。在添加它之前,最好檢查一下fieldset是否已經有fieldseterror類。

對此,您不需要validateOnSubmitafterValidate