在yii中创建依赖下拉列表


Creating a dependent dropdown in yii

我正在尝试这个关于创建一个依赖下拉列表的示例,我在provenceCity_form中创建了一个表单,并将actionDynamiccities复制到ProvinceCityController.php,但当我更改下拉列表时,我没有任何更改?我想我必须启用ajax,但我不知道我该怎么做?

<?php echo CHtml::dropDownList('country_id','', array(1=>'USA',2=>'France',3=>'Japan'),
array(
'ajax' => array(
'type'=>'POST', //request type
'url'=>CController::createUrl('ProvinceController/dynamiccities'), //url to call.
//Style: CController::createUrl('ProvinceCity/methodToCall')
'update'=>'#city_id', //selector to update
//'data'=>'js:javascript statement' 
//leave out the data key to pass all form values through
))); 
//empty since it will be filled by the other dropdown
echo CHtml::dropDownList('city_id','', array()); ?>

以下是您将在_form 中执行的操作

     <?php echo CHtml::dropDownList('country_id','', array(1=>'USA',2=>'France',3=>'Japan'),
    array(
    'ajax' => array(
    'type'=>'POST', //request type
    'url'=>CController::createUrl('ProvinceController/dynamiccities'), //url to call.
    'update'=>'#city_name', //selector to update
    'data'=>array('country_id' => 'js:this.value'), 
    ))); 
        ?>
</div>
<div id=city_name>
<?php echo $form->dropDownList($model, 'city_id', array()); ?>
</div>

希望它能对你有所帮助。

应该是

        <?php 
        $countryAry=array(1=>'USA',2=>'France',3=>'Japan');
        echo CHtml::dropDownList('country_id','', $countryAry,
                array
                (
                    'ajax' => array
                    (
                        'type'=>'POST',
                        'url'=>CController::createUrl('Controller/action'),
                        'dataType'=>'JSON',
                        'success'=>'js:function(data)'
                        . '{'
                        . '     var opt="<option value=>-----Select city-----</option>";'
                        . '     $.each(data,function(i,obj)'
                        . '     {'
                        . '         opt+="<option value=''"+obj.id+"''>"+obj.name+"</option>";'
                        . '     });'
                        . '     $("#city_id").html(opt);'
                        . '}'
                    )
              )); 
        echo CHtml::dropDownList('city_id','', array());
        ?>

但是,我建议你按照如下所示来执行这项任务。

        <?php 
        $countryAry=array(1=>'USA',2=>'France',3=>'Japan');
        echo CHtml::dropDownList('country_id','', $countryAry,array('onchange'=>'js:getCities()')); 
        echo CHtml::dropDownList('city_id','', array());
        ?>

        <script type="text/javascript">
        function getCities()
        {
            $.ajax
            ({
                type:'POST',
                url:'Controller/action',
                dataType:'JSON',
                success:function(data)
                {
                     var opt="<option value=>-----Select city-----</option>";
                     $.each(data,function(i,obj)
                     {
                         opt+="<option value='"+obj.id+"'>"+obj.name+"</option>";
                     });
                     $("#city_id").html(opt);
                }
            });
        }
        </script>

我在这里找到了解决方案yii 中的依赖下拉列表

<?php 
$model=new ModelClass; // initilize it in controller
$form=$this->beginWidget('CActiveForm', array(
'id'=>'dependent-form',
'enableClientValidation'=>true,
'htmlOptions' => array('enctype' => 'multipart/form-data','autocomplete'=>'off'),
'clientOptions'=>array(
    'validateOnSubmit'=>true,
)
)); 
?>
<div class="row">
<?php                                   
  echo $form->dropDownList($model,'country_id', 
  CHtml::listData(Countries::model()->findAll(), 'id', 'title'),
  array(
    'prompt'=>'Select Country',
    'ajax' => array(
    'type'=>'POST', 
    'url'=>Yii::app()->createUrl('YourController/loadstates'), //  get states list
    'update'=>'#ModelClass_state_id', // add the state dropdown id
  'data'=>array('country_id'=>'js:this.value'),
  ))); 
?>  
</div>
<div class="row">
<?php                                   
  echo $form->dropDownList($model,'state_id', 
  array(),
  array(
    'prompt'=>'Select State',
    'ajax' => array(
    'type'=>'POST', 
    'url'=>Yii::app()->createUrl('YourController/loadcities'), //  get states list
    'update'=>'#ModelClass_city_id', // add the state dropdown id
  'data'=>array('state_id'=>'js:this.value'),
  ))); 
?>  
</div>
<div class="row">
<?php                                   
  echo $form->dropDownList($model,'city_id',array(),array('empty'=>'-choose city-')); 
?>  
</div>
  <?php echo CHtml::submitButton($model->isNewRecord ? 'Add' : 'Update',array('class'=>'btn btn-primary')); ?>
<?php $this->endWidget(); ?>