2012-08-17 2 views
3

정적 양식에서 Yii 사용자 측 유효성 검사를 사용하고 있습니다. 하지만 아약스로드 요소에 대한 유효성 검사기를 추가하는 방법을 모르겠습니다.Yii - 아약스로드 된 폼 요소에 대한 사용자 측 유효성 검사

간단한 양식 위젯이 있고 AJAX를 통해 입력 필드를 더 적게로드하고 싶습니다. (작은 jQuery 스크립트에서는 문제가 아닙니다.) 하지만로드 된 요소에 대한 유효성 검사기 자바 스크립트 YII를 추가하는 방법을 모른다 - 내가 좋아하는 유효성 검사기 JS 만든 자동차를 의미 :

<script type="text/javascript"> 
/*<![CDATA[*/ 
jQuery(function($) { 
$('#newsletter-form-footer').yiiactiveform({'validateOnSubmit':true,'validateOnChange':false,'afterValidate':Form.handleByAjax,'attributes':[{'id':'NewsletterForm_emailaddress','inputID':'NewsletterForm_emailaddress','errorID':'NewsletterForm_emailaddress_em_','model':'NewsletterForm','name':'emailaddress','enableAjaxValidation':false,'clientValidation':function(value, messages, attribute) { 

if($.trim(value)=='') { 
    messages.push(" VALIDATOR_REQUIRED"); 
} 


if($.trim(value)!='' && !value.match(/^[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/)) { 
    messages.push(" VALIDATOR_EMAIL"); 
} 

}}]}); 
}); 
/*]]>*/ 
</script> 

방법을 추가하거나 유효성 검사기 것을 제거 할 수있는 방법이 있나요? 당신이 yiiactiveform를 사용하여 수행하려는 경우

+0

표준 방식으로 유효성 검사기를 추가합니다. 적절한 입력 요소 렌델을 사용하는보기를 렌더링합니다 (예 : [this] (http://www.yiiframework.com/doc/api/1.1/CHtml#activeTextField-detail)와 유사한 메소드 또는'CActiveForm'을 통해) – Jon

+0

나는 이미 가지고있다. 하지만 또 다른 문제가 있습니다 : 요소에 대한 유효성 검사기가 있습니다 : '$ email = new Yp_Form_Element (Yp_Form_Element :: FIELD_textField, 'email', $ this); $ email-> setRequired()' 하지만 Yii는 렌더링 페이지 이후에 자바 스크립트 클라이언트 측 유효성 검사 스크립트를 만듭니다. 하지만 아약스로드 된 요소에이 스크립트에 뭔가를 추가해야합니다. – emte

+0

ajax를 통해로드하는 대신 모든 입력을 렌더링하고 jquery를 사용하여 숨 깁니다. 너무 많지 않으면. – Asgaroth

답변

0

이 ... 조금 까다 롭습니다, 당신은에 있습니다

  1. 가 검증에 필드를 추가하거나
  2. 이 검증에서 필드를 제거

나의 제안은 다음과 같습니다

  1. (당신이 t를 할 수 있습니다 자신의 자바 스크립트 유효성 검사 기능 만들기 양식에 필드를로드 여기에 O를 복사 YII의 유효성 검사 코드)

    $('#newsletter-form-footer').submit(function() { 
         return MyValidator.validate(); 
    }); 
    
  2. //You have to get rulesORoptions 
    // along with fieldName from your ajax request. 
    MyValidator.add(fieldName, rulesORoptions); 
    
  3. MyValidator.remove(fieldName); 
    
  4. MyValidator 코드에서 필드를 제거 할 때 여기 ...

    var MyValidator = { 
         fields: {}, 
    
         add: function(fieldName, rulesORoptions) { 
           this.fields[fieldName] = rulesORoptions; 
         }, 
         remove: function(fieldName) { 
           delete this.fields[fieldName]; 
         }, 
    
         validate: function() { 
           var success = true; 
           for(var fieldName in this.fields) { 
             for(var rule in this.fields[fieldName]) { 
    
               if(eval('MyValidator.'+rule+'($("#'+fieldName+'").val())') == false) { 
                 $("#'+fieldName+'_em_").html("validation failed (some error text, rulesORoptions may contain error text)"); 
                 success = false; 
               } 
             } 
           } 
    
           return success; 
         }, 
    
         /* Validation methods are here, 
          copy the javascript validation code from Yii 
         */ 
         email: function(value) { 
           if($.trim(value)!='' && !value.match(/^[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/)) { 
             return false; 
           } 
    
           return true; 
         }, 
         required: function(value) { 
           if($.trim(value)=='') { 
             return false; 
           } 
    
           return true; 
         }, 
         number: function(value) { 
           if(/*copy yii validation code */) { 
             return false; 
           } 
    
           return true; 
         }, 
         ..... 
         ..... 
    };