Problemas Con Combos Dependiente En Yii 1.1.13

Estimados,

Estaba trabajando con combos dependientes basado en ejemplos que encontré.

Funcionan muy bien en la versión 1.1.8

El problema es que al hacer exactamente lo mismo, en la versión 1.1.13, ya no funciona.

Lo que quiero es que, al escoger una ciudad en el un combo, se presenta en el segundo combo los sectores de la ciudad seleccionada.

En la vista tengo:




	<div class="row">

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

		<?php echo $form->dropDownList($model, 'localidad_ciudad_id',Localidad::items('superior'),

			array('title'=>'Selecciona el país / ciudad en la que se encuentra tu local.',

				'ajax' => array(

					'type' => 'POST',

					'url' => CController::createUrl('local/sectordinamico'),

					'update' => '#sector_dinamic',

							)

				)

			); ?>

	</div>


	<div class="row">

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

		<div id="sector_dinamic">

			<?php echo $form->dropDownList($model,'localidad_sector_id', array('Primero seleccione un País / Ciudad')); ?>

		</div>

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

	</div>



Lo que noté es que usando Yii 1.1.8 el código java que me genera es:




<script type="text/javascript">

 $(document).ready(function(){

    $('#Local_localidad_ciudad_id').change(function(){jQuery.ajax({'type':'POST','url':'/mantenmealtanto/index.php?r=local/sectordinamico','cache':false,'data':jQuery(this).parents("form").serialize(),'success':function(html){jQuery("#sector_dinamic").html(html)}});return false;});

        })

</script>



mientras que si utilizo Yii 1.1.13 el código java que me genera es:




<script type="text/javascript">

/*<![CDATA[*/

jQuery(function($) {

jQuery('body').on('change','#Local_localidad_ciudad_id',function(){jQuery.ajax({'type':'POST','url':'/mantenmealtanto/index.php?r=local/sectordinamico','cache':false,'data':jQuery(this).parents("form").serialize(),'success':function(html){jQuery("#sector_dinamic").html(html)}});return false;});

});

/*]]>*/

</script>



La vista, los modelos, los controladores son exactamente los mismos.

El problema es que con la versión 1.1.8 funciona perfectamente, pero con la 1.1.13 no.

Alguien sabe si hay algún bug o que se debe hacer diferente para que funcione? Gracias por su ayuda, comentarios e ideas

Hola, los dos códigos generados son perfectamente equivalentes…

Lo que sí se me ocurre es un problema con assets…

Mejor dicho, pruebe limpiando el directorio “assets” y pruebe nuevamente a ver cómo va :)

Saludos.

Gracias por la idea, pero tampoco funcionó. Incluso instalé el Yii 1.1.13 en otra máquina totalmente diferente y nada. El problema se mantiene. Lo raro es que, haciendo que el combo no genere automáticamente el script java y copiando el script de la versión 1.1.8 si funciona. Por ahora, creo que tocará de esta manera.

De todas maneras, gracias, y si alguien tiene alguna otra idea o sugerencia, bienvenida

Buenos días.

Yo no lo hago así y me funciona en todas las versiones de Yii.

Lo que hago es lo siguiente:

Combo 1




<div class="row">

            <?php 

                echo $form->labelEx($model,'id1'); 

                echo $form->dropDownList($model, 'id1', CHtml::listData(

                                        Model1::model()->findAll(

                                        array('order'=>'name1 ASC')), 'id1', 'name1'),

                                        array('prompt' => 'Seleccione Name1', 'id'=>'combo1')); 

                echo $form->error($model,'id1'); 

            ?>

        </div>



Combo 2




echo $form->dropDownList(

                        $model,

                        'id2',

                        array(),

                        array('id'=>'combo2')

                        );



AJAX en la vista:




<script>

    $('#combo1').change(function(){

        var selOpt= $(this);               

        var selID= selOpt.val();     

        

        var action = 'index.php?r=controller/actionRefresh&id1=' + selID;

        

        $.getJSON(action, function(listaJson) 

        {

            $('#combo2').find('option').each(function(){ $(this).remove(); });

            

            if(listaJson.length>0)

            {

                $('#combo2').append("<option value='0'>Select Element</option>");

                

                $.each(listaJson, function(key, listElement)       

                {

                    $('#combo2').append("<option value='" + listElement.id2 + "'>" + listElement.name2 + "</option>");

                });

            }

            else

                $('#combo2').append("<option value='0'>There aren't elements for this id1</option>");

        

        }).error(function(e){ 'your error code' });

    });

</script>



Donde "actionRefresh" está en el controlador:




public function actionRefresh($id1)

    {

        $resp = Model2::model()->findAllByAttributes(

                                                        array('id1'=>$id1),

                                                        array('order'=>'name2 ASC')

                                                        );

        header("Content-type: application/json");                   

        echo CJSON::encode($resp);       

    }



No olvides añadir "actionRefresh" en las rules del controlador para poder utilizarlo.

…espero que no se me haya olvidado nada… :unsure:

Saludos.

Gracias. Actualmente estoy haciendo algo parecido.

Lo que pasa es que con el código que indiqué, todo el código AJAX necesario en la vista se generaba solo. Solo tenía que programar el controlador para refrescar con los datos relacionados.

Quería ahorrarme la parte de AJAX. :P

Bueno, ya sabes q a veces es mejor hacer las cosas “manualmente”. ;)

Saludos.