Necesito saber si se puede hacer esto

Hola a todos, ante todo mi agradecimiento por adelantado.

Necesito saber si se puede hacer lo siguiente y si se puede como: Necesito hacer al igual que los combos combinados, donde al seleccionar un elemento del primer combo, me muestre los correspondientes en el segundo combo, pero quiero hacer esto no con dos combos (dropDownList), si no con un textField y un combo size="2", o sea al escribir por ejemplo el codigo en el [/size][size="2"]textField, me aparesca en otro [/size][size="2"]textField[/size][size="2"] al lado la descripcion o nombre del elemento de ese codigo y en un [/size][size="2"]un combo [/size] size="2" me aparescan los elementos correspondientes con ese elemento, aqui muestro como lo hago con dos combos:[/size]

[size="2"]en el controlador:[/size]

[size="2"]





public function actionActualizarPuntoventas()

{

		$model = Entidades::model()->findByPk($_POST['idCod']);

							  

	//llenar Puntos Ventas

		$data = CHtml::listData($model->puntoventas,'CodPVen','Descripcion');            

		$puntoventas = "";

		foreach($data as $value=>$name)

		$puntoventas .= CHtml::tag('option',

		array('value'=>$value),CHtml::encode($name),true);  

				   

	 // return data (JSON formatted)

		echo CJSON::encode(array(

			'puntoventas'=>$puntoventas

		));

}

En la forma:





<td width="70"><div align="left"><?php echo $form->labelEx($model,'CodUEB'); ?><span class="row"><?php echo $form->dropDownList($model,'CodUEB',  

	CHtml::listData(Entidades::model()->findAll(array('order'=>'NEnt')), 'CodUEB', 'NEnt'),

	array(                              

			'ajax' => array(

			'type'=>'POST',

			'url'=>CController::createUrl('datossal/actualizarPuntoventas'),

			'dataType'=>'json',

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

			'success'=>'function(data) {

			$("#Datossal_CodPVen").html(data.puntoventas); 

			}') 

	)

	); ?> <?php echo $form->error($model,'CodUEB'); ?></span></div></td>

    <td width="43"><?php echo $form->labelEx($model,'Punto Venta'); ?><?php echo $form->dropDownList($model,'CodPVen',

    array()); ?><?php echo $form->error($model,'CodPVen'); ?></td>

Como observan son dos combos, pero quiero hacerlo con un

[size="2"]textField[/size][size="2"] primero y al llenar ese [/size][size="2"]textField[/size][size="2"] en el combo me aparezca lo relacionado con lo introducido en el [/size][size="2"]textField y ademas quiero en otro [/size][size="2"]textField[/size][size="2"] al escribir el codigo en el primer [/size][size="2"]textField[/size][size="2"] me aparezca el nombre del elemento.[/size]

[size="2"]No se si me explicado bien, cualquier cosa me preguntan[/size][/size]

Si no he entendido mal, lo que quieres es convertir el primer combo en un autocomplete con comportamiento de combobox.

http://jqueryui.com/autocomplete/#combobox

jquery ui entero está integrado en yii:

http://www.yiiframework.com/doc/api/1.1/CJuiAutoComplete

Así que solo necesitarías configurar el autocomplete para que cuando se seleccione el valor se cargue lo que quieras en el combo 2.

Si en el combo1 tienes muchos valores (estoy hablando de 1000 o más), a lo mejor deberías considerar cargarlos por ajax… Pero primero implementalo el ajax te puede complicar un poco la cosa.

Suerte!

Gracias por responder, no es eso exactamente lo que quiero hacer, no quiero tener primer combo, lo que quiero es cambiar el primer combo por un textField y me haga lo mismo que con los dos combos, o sea en vez de escoger en el primer combo lo que deseo, como no voy a tener un combo y si un textField, entonces quiero escribir (teclear) el código y en el segundo combo que si lo voy a tener solo me muestre los elementos relacionados con el codigo que escribi en el primer textField, y adicionalmente deseo tener un segundo textField al lado del primero para cuando escriba el codigo en el primer textField, en ese segundo me aparezca la descripcion del articulo Ej: tengo en la BD en la tabla Clientes un articulo que es Codigo: 25624 y descripcion que es: Empresa de derivados de la caña de azucar y en otra tabla tengo que las personas autorizadas de ese cliente son: Maria Reyes, Jose Corrales y Eduardo Morales.

Entonces ahi debe hacer lo siguiente: en el primer textField escribo: 25624 en el segundo textField (solo lectura ) aparecerá: [size="2"]Empresa de derivados de la caña de azucar y en el combo relacionado apareceran solo estos Nombres: [/size] [size="2"]Maria Reyes, Jose Corrales y Eduardo Morales.[/size]

[size="2"]Es esto lo que quiero hacer.[/size]

Hola, estoy tratando de hacer algo similar, quizá te pueda ayudar el uso del método onChange del cuadro de texto y mediante un método verificar si lo ingresado es válido o no y de esta manera cargar los datos en el dropDown, sería algo así.


<div class="row">

                <?php echo $form->labelEx($model,'Atributo'); ?>

                <?php echo $form->textField($model,'Atributo',array('onchange'=>'return Funcion(this.value)')); ?>

                <?php echo $form->error($model,'Atributo'); ?>

        </div>

Y en la función que sería una función js tendrías que revisar si lo que está siendo ingresado es válido, y de ser así actualizar el dropDown, o lo que yo hice pero no en Yii fue mostrarlo ya que si el cuadro de texto no tenía un dato válido dejaba el dropDown oculto.

Saludos.

PD: No lo he probado, así que no sabría si funciona completamente ya que soy nuevo en el uso del framework

Ok Jonakr con esto resuelvo la primera parte de al escribir el codigo me actualiza el combo, pero ahora necesito la segunda parte, o sea otro textField que al escribir en codigo en el primer textField en este me aparezca la descripcion.

revisame eso

Hola, adjunto lo que creo es la solución que yo le dí por si aún la necesitas.

El valor no cambia si no hasta sacar el foco del campo de texto ya que utilicé blur en el método ajax, eso lo puedes cambiar a tu conveniencia.

Primero el formulario


<div class="row">

        <?php echo $form->labelEx($model, 'rut_paciente'); ?>

        <?php echo $form->textField($model, 'rut_paciente', array('size' => 20, 'maxlength' => 20, 'id' => 'rut_paciente')); ?>

        <?php echo $form->error($model, 'rut_paciente'); ?>

    </div>


    <div class="row">

        <?php echo $form->labelEx($model, 'paciente'); ?>

        <?php echo $form->textField($model, 'paciente', array('size' => 20, 'maxlength' => 20, 'id' => 'paciente')); ?>

        <?php echo $form->error($model, 'paciente'); ?>

    </div>

Luego entra en juego ajax


<script>

        $('#rut_paciente').on('blur', function() {

            $.ajax({

                url: <?php echo "'".CController::createUrl('cita/ExistePaciente')."'"; ?>,

                data: {'rut_paciente': $('#rut_paciente').val()},

                type: "post",

                success: function(data) {

                    var x = document.getElementById('rut_paciente');

                    alert(x.value);

                    var retrievedJSON = data;

                    var array = JSON.parse(retrievedJSON);

                    paciente.value = array[0].nombre_paciente;

                    paciente.disabled = true;

                }

            });

        });

    </script>

Y por último el action en el controlador


public function actionExistePaciente() {

        if ($_POST['rut_paciente']) {

            $rut_paciente = $_POST['rut_paciente'];

            $datos = Yii::app()->db->createCommand("SELECT nombre_paciente FROM PACIENTE WHERE rut_paciente = " . "'".$rut_paciente."'")->queryAll();

            echo(($datos) ? json_encode($datos) : '');

        } 

    }

Creo que si entendí bien tu problema esto lo puede solucionar, otra cosa, si te resultó lo de actualizar el dropDownList mediante el valor del campo de texto me podrías indicar como lo hiciste? ya que en Yii no lo he implementado y me sería de utilidad en el futuro.

Un saludo