Ayuda Con Js:function(Event, Ui)

Hola cómo están?? Cada vez que sigo incursionando en yii más dudas y detalles salen…

Necesito ayuda en esto por favor…

Tengo un campo cédula, que tiene un autocompletar… el autocompletar funciona, pero aún así no me quiere traer los datos que llamo en el respectivo query de la función…

_form:

<div class="row">

	&lt;?php echo &#036;form-&gt;labelEx(&#036;model,'Cédula:'); ?&gt;


           &lt;?php 


           &#036;this-&gt;widget('zii.widgets.jui.CJuiAutoComplete', array(


            'id'=&gt;'strcedula',


            'name'=&gt;'strcedula',


            'source'=&gt;&#036;this-&gt;createUrl('Tblusuario/autocomplete'),


            // additional javascript options for the autocomplete plugin


            'options'=&gt;array(


                   'showAnim'=&gt;'fold',


                   'minLength'=&gt;'2',


                   'focus'=&gt;'js:function(event, ui) {


                             alert(ui.item.strcedula);


                             &#036;(&quot;#strcedula&quot;).val(ui.item.strcedula);


                             return false;


                             }',


                            'select'=&gt;&quot;js:function(event, ui) {


                            &#036;('#strcedula').val(ui.item.cedula);


                            &#036;('#strnombre').val(ui.item.nombre);


                            return false;


                            }&quot;,


            ),


                


        ));    


	&lt;?php echo &#036;form-&gt;error(&#036;model,'strcedula'); ?&gt;


&lt;/div&gt;

En el controlador:

public function actionAutocomplete()

    {


        &#036;res =array();


        if (isset(&#036;_GET['term'])) {


        &#036;qtxt = &quot;Select distinct a.cedper as cedula,a.nomper as nombre,a.apeper as apellido


            from sno_personal a


            join sno_hpersonalnomina b on a.codemp = b.codemp and a.codper = b.codper


            join sno_ubicacionfisica d on d.codemp = b.codemp AND b.codubifis = d.codubifis


            where a.estper='1' AND b.codubifis = '0225' AND cedper LIKE :strcedula&quot;;


            &#036;command =Yii::app()-&gt;dbsigesp-&gt;createCommand(&#036;qtxt);


            &#036;command-&gt;bindValue(&quot;:strcedula&quot;, '%'.&#036;_GET['term'].'%', PDO::PARAM_STR);


            &#036;res =&#036;command-&gt;queryColumn();


        }


        echo CJSON::encode(&#036;res);


        Yii::app()-&gt;end();





    }

LA IDEA ES QUE ME TRAIGA APARTE DE LA CEDULA, EL NOMBRE Y APELLIDO DE LA PERSONA Y PLASMARLO EN LOS RESPECTIVOS CAMPOS QUE TENGO EN EL _FORM(NO LOS COLOQUÉ AQUI)… QUISE HACER PRUEBAS CON EL ALERT QUE ESTA EN EL FOCUS PARA VER SI POR LO MENOS M TRAE LA CEDULA… Y NADA… EL ALERT VIENE VACIO…

HACE EL AUTOCOMPLETAR PERO NO ME TRAE EL DATO NI EN EL FOCUS NI EN EL SELECT…

QUE PODRÁ SER?? GRACIAS…

Tienes que cambiar queryColumn por queryAll y acceder a los valores tal y como lo defines en tu consulta (cedula, nombre y apellido)




alert(ui.item.cedula);

alert(ui.item.nombre);

alert(ui.item.apellido);



No estoy seguro si esto funciona. La otra solucion seria concatenar tus columnas y colocar alguna separador (ej. coma) y hacer un explode para separar los datos. En este caso si debes usar queryColumn.

Colocando el queryAll no me funciona el autocompletar, pero si funcionan los alert…

Al colocar el queryAll no tengo que cambiar el $command->bindValue??

Hola DAniel gracias por tu respuesta, lo hice como me dijiste al principio, pero al colocar el queryAll me lleva los datos(cedula,nombre,apellido) al :_form, pero el autocompletar aparece vacío… SI coloco el queryColumn es todo lo contrario, aparece el listado d las cedulas en el autocompletar pero no me trae los demas datos…

que me faltaría?? gracias

Yo lo veo bien, dame oportunidad de implementarlo y te comento.

:rolleyes:

Utilizando queryAll tu codigo deberia quedar algo como:




$this->widget('zii.widgets.jui.CJuiAutoComplete', array(

    'id'=>'strcedula',

    'name'=>'strcedula',

    'source'=>$this->createUrl('Tblusuario/autocomplete'),

    'options'=>array(

        'showAnim'=>'fold',

        'minLength'=>'2',

        'focus'=>'js:function(event, ui) {

            $("#strcedula").val(ui.item.cedula);

            return false;

        }',

        'select'=>"js:function(event, ui) {

            alert(ui.item.cedula);

            alert(ui.item.nombre);

            alert(ui.item.apellido);

            var nombre_completo = ui.item.nombre + ' ' + ui.item.apellido;

            $('#strcedula').val(ui.item.cedula);

            $('#strnombre').val(ui.item.nombre_completo);

            return false;

        }"

    )

));


// aqui el truco

Yii::app()->clientScript->registerScript('input', '

        $("#strcedula").data("autocomplete")._renderItem = function( ul, item ) {

            // si solo quieres cedula quita nombre

            return $( "<li></li>" ).data( "item.autocomplete", item ).append( "<a>" + item.cedula + " - " + item.nombre + "</a>").appendTo(ul);

        };

');



[RESUELTO] A la perfección… Muchisisisisimas gracias… :rolleyes: :D

Perfecto!!!,

Me regalas un +1 para mejorar mi reputacion dentro del sitio?

Gracias,

Disculpa la pregunta pero cómo hago eso?? jeje… es q soy nueva en esto de foros también :P :unsure:

En la solucion propuesta en la parte de abajo tienes un circulo verde con el signo de + en blanco, ahi debes darle el clic.

:D