enableAjaxValidation dengan onChage

Para master yii…

ane pengen buat validasi AjaxValidation seperti ClientValidation…

kan kalo ClientValidation itu pas di kita isi trus pindah baris langsung di cek, valid ato ngga datanya…

ane pengen buat kaya gitu pake AjaxValidation(karena ngeceknya dari database),.

ane udah buat pake Onchange, tapi tulisan errornya ga bagus…

kalo ane sih pengen tulisan errornya kaya yang ClientValidation itu.kaya gini

2656

My Web Application - Cp-144215.png

tapi sekarang baru begini

2657

My Web Application - Operator-144325.png

kodenya gini:

ini _form.php




<div class="row">

		<?php echo $form->labelEx($model,'code'); ?>

		<?php echo $form->textField($model,'code',array('id'=>'code',

                'ajax'=>array(

                    'type'=>'POST',

                    'url'=>Yii::app()->createUrl('operator/validcode'),

                    'update'=>'#error_message'

                )

               )); ?>

		<?php echo $form->error($model,'code'); ?>

	</div>

    <div id="error_message" style="color:red; font-size:12px">

    		

    </div>

operatorController.php




public function actionValidcode()

	{

		$code = $_POST['Operator']['code'];

		$code1 = Operator::model()->findAll('code=:vcode', array(

			':vcode'=>$code, 

		));

		foreach($code1 as $a)

		{

			echo $code.' sudah terdapat dalam database..!';

		}		

	}



errornya cuma di echo doang…

cara biar errornya kaya ClientValidation gimana 2656

My Web Application - Cp-144215.png
?????

mungkin ini salah satu solusinya,

tapi belum saya test,





   <div class="row">

                <?php echo $form->labelEx($model,'code'); ?>

                <?php echo $form->textField($model,'code',array('id'=>'code',

                'ajax'=>array(

                    'type'=>'POST',

                    'url'=>Yii::app()->createUrl('operator/validcode'),

                    'success'=>'function(result){

                                          if (result != '')

                                          {

                                               jQuery("#error_message").html(result);

                                               jQuery("#error_message").parent().addClass("error");

                                          }

                                }' 

                           

                )

               )); ?>

                <?php echo $form->error($model,'code'); ?>


               <div id="error_message" style="color:red; font-size:12px"></div>

        </div>

    



ceritanya adalah, kita merubah opsi success dari ajax request,

yang apabila hasilnya (variable result) ada pesan kesalahan (result != ‘’) maka kita suruh jQuery untuk menambahkan pesan kesalahan pada #error_message, dan juga menambahkan class ‘error’ pada parent-nya yaitu <div class=“row”>. maka dari itu perlu dirubah sedikit, yaitu <div id=“error_message”> perlu dimasukkan ke dalam <div class=“row”>. (pada sccript kamu ada diluar <div class=“row”>).

dengan ditambahkan class error pada <div class="row"> sehingga menjadi <div class="row error">, maka css element di dalam div itu pun berubah menjadi merah (sepertinya default css form yii seperti itu). kalau tidak ya tinggal menambahkan saja di css kamu untuk menangani class error.

secara logic kira-kira begitu. belum saya test, tapi seharusnya bisa. semoga secara prinsip metodenya sudah bisa dimengerti.

Sebaiknya agan pake browser firefox + addon firebug untuk mendebug ajax :) . Sebenarnya Yii sudah menyediakan ajax validation, jika agan generate crud menggunakan Gii. contohnya seperti ini:




// protected/controllers/BookController.php

class BookController extends Controller

{

    ...

    // Action tambah

    public function actionAdminAdd() {

        $model=new Book;


        // Validasi model ini via ajax

        $this->performAjaxValidation($model);

        ...

    }

    

    // Validasi ajax

    protected function performAjaxValidation($model) {

        if(isset($_POST['ajax']) && $_POST['ajax']==='book-form') {

            echo CActiveForm::validate($model);

            Yii::app()->end();

        }

    }

    ..

}


// protected/views/book/_form.php

// Kemudian di viewnya tinggal agan tambahin setingan ajax validation menjadi true

<?php $form = $this->beginWidget('CActiveForm', array(

    'id'=>'user-form',

    'enableAjaxValidation'=>true, // Untuk validasi via ajax

    'enableClientValidation'=>true, // Validasi via javascript (client validasi)

)); ?>



Jika agan menginginkan custom validasi di model, misalnya pengecekan id silahkan lihat disini

semoga membantu :D

iya gan ane udah buat pake AjaxValidation, tapi kan kalo pake ajakValidation itu harus submit dulu, baru muncul errornya…

sedangkan yang saya inginkan itu melakukan ajaxValidation tanpa harus klik submit.

mungkin seperti clientValidation…

makasih gan…

saya coba dulu…

tambahan sedikit… kurang else di bagian ajax success untuk mengantisipasi validasi yang benar oleh user setelah mereka melakukan kesalahan.

perubahannya seperti ini:





'success'=>'function(result){

                 if (result != '') // validasi tidak terpenuhi

                 {

                      jQuery("#error_message").html(result);

                      jQuery("#error_message").parent().addClass("error");

                 }

                 else // validasi terpenuhi maka hilangkan class div html error

                 {

                      jQuery("#error_message").html('');

                      jQuery("#error_message").parent().removeClass("error");

                 }


            }' 



ini sich jalan untuk ngeceknya,tp klo disubmit masih ngirim ke Controller , gan ?