[Ask] Auto Fill Text Field

nanya lagi nih gan, kalo bikin atofill text field itu gmn ya?

sama kyk dependent dropdown list kah?

ane nyoba’ ikut dari diskusi disini, tp masih bingung…

untuk model relasi ane ane lampirin gambarnya…

mohon bantuan ya…

trims…

Mau bikin autofill seperti gimana, sam?

kalo diskusi di link itu kan, op maunya open URL/id formnya langsung komplit sendiri, mirip sama form update biasa.

kalo kamu perlunya gimana? dropdownlist employee ngisi dropdown salary, gitu?

butuhnya gini gan, ini kan form nya jadi 1 create, ada 2 tab form employee form dan salary form, nah ketika kita buka tab salary pengennya dstu udah mengarah ke EMP_ID yg sama dengan EMP_ID yg ada di form employee… gtu gmn ya gan?

ato klo gampangnya dari dropdownlist milih EMP_ID nanti EMP_name nya muncul otomatis…

saya nangkapnya gini ya:




tab karyawan

 employee id   [_____|V]          //ini diganti

 employee name [______________]   //otomatis muncul namanya


tab salary

 employee id   [_____|V]          //nilainya sama dengan yg diganti di atas



bayangan saya employee id adalah dropdown atau textfield, saat diganti maka employee id di salary akan mengikuti, ini pake js biasa:




Yii::app()->clientScript->registerScript('form-employee', '

 $("#EMPLOYEE_EMP_ID").change(function() {

   $("#SALARY_SAL_EMP_ID").val($(this).val());

 });

');



untuk mengisi nama employee saat employee id diubah perlu pake ajax, gunakan saja bawaan CHtml saat deklarai elemen, contoh:




//di view, form

 echo CHtml::activeDropDownList($model, 'EMP_ID', $arrayEmployeeId, array(

'ajax'=>array(

  'type'=>'GET',

  'url'=>CController::createUrl('employee/getName'),

  'update'=>'#EMPLOYEE_EMP_NAME',

  'data'=>array('id'=>'js: this.value'),

), 

 ));


//di employee controller

 public function actionGetName($id) {

   $model = $this->loadModel($id);


   echo $model->EMP_NAME;

 }



ane cb masih gagal om… kode error 400 invalid request kalau di lead dr console…

form ane gini :




<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array(

	'id'=>'salary-form',

	'enableAjaxValidation'=>false,

)); ?>


<div class="well">

	<p class="help-block">Fields with <span class="required">*</span> are required.</p>


	<?php echo $form->errorSummary($model2); ?>

	

	<?php echo $form->dropDownListRow($model2,'SAL_EMP_ID', CHtml::listData(EMPLOYEE::model()->findAll(), 'EMP_ID','EMP_ID'),array(

		'prompt'=>'-----Pilih NIK-----',

		'ajax'=>array(

			'type'=>'GET',

			'url'=>CController::createUrl('getName'),

			'update'=>'#SALARY_SAL_EMP_NAME',

			'data'=>array('SAL_EMP_ID'=>'js:this.value'),

		)

	)); ?>

	

	<?php echo $form->textFieldRow($model2,'SAL_EMP_NAME',array('class'=>'span4','maxlength'=>30)); ?>

	

	<div class="row-fluid">

		<div class="span4">

			<?php echo $form->dropDownListRow($model2,'SAL_CURR'); ?>

		</div>

		<div class="span3">

			<?php echo $form->textFieldRow($model2,'SAL_BASIC',array('class'=>'span8')); ?>

		</div><div class="span4">

			<?php echo $form->textFieldRow($model2,'SAL_BASIC_PERDAY',array('class'=>'span8')); ?>

		</div>

	</div>

	<div class="row-fluid">

		

	</div>

	<div class="form-actions">

		<?php $this->widget('bootstrap.widgets.TbButton', array(

			'buttonType'=>'submit',

			'type'=>'primary',

			'label'=>$model2->isNewRecord ? 'Create' : 'Save',

		)); ?>

	</div>

</div>


<?php $this->endWidget(); ?>




di controller nya ane tambahin:




public function actionGetName($id)

	{

		$model = $this->loadModel($id);

		

		echo $model->EMP_NAME;

	

	}




coba action ini dicoba langsung di browser, hasilnya gimana?




public function actionGetName($id)

	{

		$model = $this->loadModel($id);

		

		echo $model->EMP_NAME;

	

	}




buka: http://url/index.php?r=nama_controller/getName&id=1

output: sesuai yg diharapkan?

ngomong2 itu actionnya minta parameter $id,

tapi kok di view waktu passing nilai nama parameternya SAL_EMP_ID, apa nggak error hasilnya?




...

	<?php echo $form->dropDownListRow($model2,'SAL_EMP_ID', CHtml::listData(EMPLOYEE::model()->findAll(), 'EMP_ID','EMP_ID'),array(

...

			'data'=>array('SAL_EMP_ID'=>'js:this.value'), //mestinya kan 'id'=>'js: this.value'

		)

	)); ?>

	



untuk d view, udah saya ubah ‘id’, dan waktu t racking pakai console di inspect element tidak ada error, tp di view kolom nama masih kosong om… gmn y?

[s]trus untuk yg cb buka action getName langsung d browser, munculnya Error 404

The requested page does not exist.[/s]

ternyata ane yg salah masukin EMP_ID nya :D, data yg tampil udah bner sih om, cm d textfield SAL_EMP_NAME belum keluar namanya.

pastiin kolom yg diupdate sama dropdown udah bener css-idnya belom?




...

<?php echo $form->dropDownListRow($model2,'SAL_EMP_ID', CHtml::listData(EMPLOYEE::model()->findAll(), 'EMP_ID','EMP_ID'),array(

                'prompt'=>'-----Pilih NIK-----',

                'ajax'=>array(

                        'type'=>'GET',

                        'url'=>CController::createUrl('getName'),

                        'update'=>'#SALARY_SAL_EMP_NAME', //-->cek ulang ini

...



kudu sama dengan css-id generatean dari ini:




        <?php echo $form->textFieldRow($model2,'SAL_EMP_NAME',array('class'=>'span4','maxlength'=>30)); ?>



biasanya sih formatnya ngikutin #namaModelnya_nama_fieldnya

tapi biar lebih pasti, coba aja di view source lalu baca html input bagian itu, kan ada ntar serupa ini:




<input type="text" ... name="BLABLABLA[SAL_EMP_NAME]" id="#ZZZZZ" />



ambil itu id elemen yg mesti diupdate.

udah bner kok om, ini barusan saya cek di element, harusnya di kolom SAL_EMP_NAME ini sudah ada isinya, tp di view nya kosong, saya lampirin screenshootnya

hmm… masuk ke debugging nih :)

cobain:

[list=1]

[*] isi manual nilainya kolom SAL_EMP_NAME bisa nggak?

a. buka lagi firebug/developer toolsnya,

b. buka tab console

c. ketikin $("#SALARY_SAL_EMP_NAME").val("update nama manual");

d. mestinya nilai yg diform langsung berisi: update nama manual

[*] cek apa ajaxnya udah passing parameter dengan benar

a. buka lagi firebug/developer toolsnya,

b. buka tab network

c. dari form pilih employee

d. mestinya di tab network kelihatan request ke action getname, klik bagian header, pastikan ada parameter id dan isinya sudah sesuai dropdown yg diganti

[*] cek apa ajaxnya udah mengembalikan respon dengan benar

a. buka lagi firebug/developer toolsnya,

b. buka tab network

c. dari form pilih employee

d. mestinya di tab network kelihatan request ke action getname, klik bagian response, pastikan kembalian/respon adalah nama sesuai id yg diminta

[/list]

requestnya ok semua e om :unsure:

hm… iya kelihatannya udah bener semua,

lanjutin aja debugnya, beberapa variasi yg bisa dicoba:

  1. tambahin script untuk load hasil response pake alert atau console.log

  2. buat script untuk fetch dan update nama secara manual

  3. kalo no-2 bisa, binding aja scriptnya ke SAL_EMP_ID secara manual, lalu matikan yg dibuat pake CHtml helper