CAutoComplete funktioniert nach der 1.Suchanfrage nicht mehr

hallo zusammen,

in das Cgridview modul habe ich für das feld "name" das Cautocomplete modul eingebunden. die 1.suchanfrage funktionert auch wunderbar, sprich ich tippe etwas in das suchfeld und bekomm auch vorschläge und kann die suche absetzen.

will ich jedoch erneut suchen, funktioniert das autocomplete modul nicht mehr. ich tippe in das suchfeld, es kommen jedoch keine vorschläge. erst wenn ich die seite komplett neu lade geht autocomplete wieder.

woran könnte das liegen?

ein anderes problem betrifft das selektieren der autocomplete vorschläge: wenn ich den eintrag per klick auswähle wird die suche sofort gestartet. wenn ich den eintrag per return übernehme, wird keine suche gestartet, sondern der eintrag landet nur im suchfeld und ich muss dann nochmal bestätigen.

danke für eure hilfe

View:




<?php 

	$this->widget('zii.widgets.grid.CGridView', array(

		'dataProvider' => $model->search(),

		'filter' => $model,

		'columns' => array(

			array(

				'name' => 'name',

				'filter'=> $this->widget('CAutoComplete',

					          array(

					             'name'=>'name', 

					             'url'=>array('controller/autoCompleteLookup'), 

					             'max'=>10,

					             'minChars'=>1, 

					             'delay'=>0,

					             'matchCase'=>false,

					             'htmlOptions'=>array('size'=>'40'), 

					             //'methodChain'=>".result(function(event,item){\$(\"#id\").val(item[1]);})",

					             ), true),

			),

			array(

				'name' => 'admin',

				'filter' => array(0 => 'Admin', 1 => 'User'),

	        ),

		),

	));

	echo CHtml::hiddenField('id');

?>



Controller:




	public function actionAutoCompleteLookup()

	{

		if(Yii::app()->request->isAjaxRequest && isset($_GET['q'])) {

			$name = $_GET['q'];

			$limit = min($_GET['limit'], 50);

			$criteria = new CDbCriteria;

			$criteria->condition = "name LIKE :sterm";

			$criteria->params = array(":sterm"=>"%$name%");

			$criteria->limit = $limit;

			$userArray = Model::model()->findAll($criteria);

			$returnVal = '';

			foreach($userArray as $userAccount) {

				$returnVal .= $userAccount->getAttribute('name').'|'

				.$userAccount->getAttribute('id')."\n";

			}

			echo $returnVal;

		}

	}



Model:




public function search() {

		$criteria=new CDbCriteria;


		if(Yii::app()->request->getQuery("name")){

            		$criteria->compare('name', $_GET['name'], true);

       	 	}

		$criteria->compare('admin',$this->admin);


		return new CActiveDataProvider(get_class($this), array(

			'criteria'=>$criteria,

			'sort'=>array(

				'defaultOrder'=>'name ASC',

			),

			'pagination'=>array(

				'pageSize'=>5

			),

		));

	}



Damit habe ich mich vor einiger Zeit auch mal rumgeschlagen (CGridView Filter with autocomplete).

Das Problem ist, dass das entsprechende Eingabefeld beim Ajax-Request neugeladen wird (genauso wie der Rest des CGridView). Um die ursprüngliche Funktionalität wieder herzustellen, muss das AutoComplete neu initialisiert werden. Dies geschieht normalerweise nur nach dem Laden er kompletten Seite. Man kann allerdings als workaround auch eine Reinitialisierung über ein AjaxSuccess-Event erzwingen. Ich habe dafür das Widget entsprechend erweitert, bin aber nicht ganz zufrieden damit. Näheres in obigem Thread.

mubo