Yii Framework Forum: enableAjaxValidation dengan onChage - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

enableAjaxValidation dengan onChage Rate Topic: -----

#1 User is offline   teguh11 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 129
  • Joined: 13-November 11

Posted 12 March 2012 - 02:25 AM

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
Attached File  My Web Application - Cp-144215.png (11.79K)
Number of downloads: 47
tapi sekarang baru begini
Attached File  My Web Application - Operator-144325.png (5.84K)
Number of downloads: 37

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 Attached File  My Web Application - Cp-144215.png (11.79K)
Number of downloads: 47?????
belajar itu mudah..
0

#2 User is offline   xtremagix 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 06-May 11

Posted 13 March 2012 - 12:14 PM

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.
There's no such thing of Individualism, Sharing with others is how you respect the knowledge itself...
0

#3 User is offline   __agus 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 166
  • Joined: 22-April 10
  • Location:Yogyakarta, Indonesia

Posted 13 March 2012 - 12:28 PM

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

View Postteguh11, on 12 March 2012 - 02:25 AM, said:

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
Attachment My Web Application - Cp-144215.png
tapi sekarang baru begini
Attachment 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 Attachment My Web Application - Cp-144215.png?????

0

#4 User is offline   teguh11 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 129
  • Joined: 13-November 11

Posted 14 March 2012 - 02:44 AM

View Post__agus, on 13 March 2012 - 12:28 PM, said:

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..
belajar itu mudah..
0

#5 User is offline   teguh11 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 129
  • Joined: 13-November 11

Posted 14 March 2012 - 02:46 AM

View Postxtremagix, on 13 March 2012 - 12:14 PM, said:

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.


makasih gan..
saya coba dulu...
belajar itu mudah..
0

#6 User is offline   xtremagix 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 06-May 11

Posted 15 March 2012 - 04:02 AM

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");
                 }

            }' 

There's no such thing of Individualism, Sharing with others is how you respect the knowledge itself...
0

#7 User is offline   dedi sugianto 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 27-September 12

Posted 28 September 2012 - 12:04 AM

View Postxtremagix, on 15 March 2012 - 04:02 AM, said:

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

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users