Ajax al modificar un textfield

Hola

Estoy haciendo un buscador que muestre los resultados mientras estas escribiendo en el textfield correspondiente.

El problema es que actualiza el contenido cuando pierde el foco o pincho fuera del textfield, no mientras lo estoy modificando.

¿Alguien sabe cómo realizar la misma acción ajax al mismo tiempo que escribes en el textfield?

He intentado con clientOptions pero parece que no lo he hecho bien ;)

‘clientOptions’=>array(

                    'validateOnChange'=>true,   Esto para los cambios


                    'validationDelay'=>0,            Esto para poner un tiempo


                    ),



<div class="form">

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

                    'id'=>'search-form',

                    'enableAjaxValidation'=>false,

            )); ?>        


                <div class="buscador">                      

                        <?php echo $form->textField($modelSearch,'buscar', array(

                            'ajax'=>array(

                                'type'=>'POST',

                                'url'=>CController::createUrl('site/busqueda'),

                                'update'=>'#resultados'),

                            'size'=>60,'maxlength'=>128)   

                        ); ?>    

                                                  

                </div>


                <div class="buscador" id="botonBuscador">

                        <?php echo CHtml::submitButton('Buscar'); ?>

                </div>

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

        </div> 



Esto debería corregir el problema.




<div class="form">

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

                    'id'=>'search-form',

                    'enableAjaxValidation'=>false,

                    'clientOptions'=>array(

                        'validateOnType'=>true, // Validar al digitar

                        //'validationDelay'=>0, // No recomiendo poner esta línea a menos que sea absolutamente necesario

                        ),

               	)); ?>        


                <div class="buscador">                      

                        <?php echo $form->textField($modelSearch,'buscar', array(

                            'ajax'=>array(

                                'type'=>'POST',

                                'url'=>CController::createUrl('site/busqueda'),

                                'update'=>'#resultados'),

                            'size'=>60,'maxlength'=>128)   

                        ); ?>    

                                                  

                </div>


                <div class="buscador" id="botonBuscador">

                        <?php echo CHtml::submitButton('Buscar'); ?>

                </div>

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

        </div> 



Saludos y éxitos,

Ricardo

Parece que tampoco funciona.

Por lo que he estado intentando y viendo, el problema no es del formulario, ni de su validación

El problema está en las opciones ajax del input textfield, sólo llama a la función correspondiente del controlador, cuando pierde el foco o pincho fuera de él.

No estoy seguro y dime si me confundo, pero de la otra forma (con los clientOptions) lo que hago es validar con el modelo del formulario SearchForm, las valores de los atributos del mismo, si es entero, único, email, … la function rules() que los define.

Si no fuese por eso, lo hace perfecto.

Muchas gracias de todas formas.

Por otro lado el zii.widgets.CListView que muestra el contenido de la búsqueda funciona perfectamente con ajax, para todas las páginas de los resultados < primera, 1, 2, última > , pero si le doy al boton de búsqueda del formulario, ese mismo zii.widgets.CListView sólo funciona en la primera página de los resultados, al querer ver las siguientes páginas con los, me muestra la imagen de un captcha que tiene otro formulario en la misma página. ¿?

Esto ya lo explicaré mejor en otro post pero creo que es problema de la css, aún siendo lo mismo, se monta de diferente forma dependiendo si lo hago por ajax o por el sumit del botón e inexplicablemente por ahora tiene conflicto con el captcha además de otros errores de css. ;)

Pruebe agregando:


<?php echo $form->error($modelSearch, 'buscar'); ?>

Según veo en la ejecución del ajax, solamente se ejecuta cuando ha sido agregado primero, y los campos que se validan, se agregan cuando la función "error" es llamada.

Saludos.

Gracias.

Tomo nota de lo que me dices, lo he intentado pero no me funciona, de todas formas ahora estoy en un pc sin xdebug, en cuanto esté en mi pc ya intentaré lo mismo con tus indicaciones y más cosas siguiendo lo que hace ;)

Además tendré a mano la guia de Yii y otras documentaciones que donde estoy ahora no tengo a mano ;)

El Lunes pondré aquí que resultados obtengo.

Un saludo.