Php 下拉列表值在Yii中未正确更新

Php 下拉列表值在Yii中未正确更新,php,ajax,drop-down-menu,Php,Ajax,Drop Down Menu,我有三个相互依赖的下拉列表。代码如下: echo CHtml::dropDownList('island_id',$island,$locationsList, array('ajax'=>array('type'=>'POST', 'url'=>CController::createUrl('supplierHead/ge

我有三个相互依赖的下拉列表。代码如下:

 echo CHtml::dropDownList('island_id',$island,$locationsList, 
                            array('ajax'=>array('type'=>'POST',
                                                'url'=>CController::createUrl('supplierHead/getRegions'),
                                                'update'=>'#region_id',),
                                  'id'=>'island_id',
                                  'empty'=>'Choose Island',
                            )); 
    echo " ";
    echo CHtml::dropDownList('region_id',$region, $regionsList, 
                            array('ajax'=>array('type'=>'POST',
                                                'url'=>CController::createUrl('supplierHead/getProvinces'),
                                                'update'=>'#province_id',),
                                  'id'=>'region_id',
                                  'empty'=>'Choose Region',
                            ));
    echo " ";
    echo CHtml::dropDownList('province_id',$province,$provincesList, array('empty'=>'Choose Province'));
island_id是父项,当选择一个值时,它会更新第二个下拉列表,并用相对于父项的数据填充它,然后一旦选择第二个下拉列表的值,它就会填充第三个下拉列表的可用值

问题:

当所有下拉菜单都设置了值,并且我决定更改第一个下拉菜单(父菜单)的值时,它会更新第二个下拉菜单的值,但不会更新第三个下拉菜单的值。只有当我手动更改第二个下拉列表中的值时,第三个下拉列表才会更新。此外,当第二个下拉列表值更改时,第三个下拉列表会更新正确的值,但父项不会更改。我怎样才能解决这个问题

这是我的控制器:

public function actionGetRegions()
{
    $data=Locations::model()->findAll('location_parent=:location_parent AND location_id != :location_parent', array(':location_parent'=>(int) $_POST['island_id']));
    $data=CHtml::listData($data, 'location_id', 'location_name');

    foreach ($data as $value => $name) {
        echo CHtml::tag('option', array('value'=>$value), CHtml::encode($name), true);
    }
}

public function actionGetProvinces()
{
    $data=Locations::model()->findAll('location_parent=:location_parent AND location_id != :location_parent', array(':location_parent'=>(int) $_POST['region_id']));
    $data=CHtml::listData($data, 'location_id', 'location_name');

    foreach ($data as $value => $name) {
        echo CHtml::tag('option', array('value'=>$value), CHtml::encode($name), true);
    }
}
没关系,你必须显示你的控制器文件

或者用这个

它在你的控制器上

    $data=CHtml::listData($data,'id','name'); //$data depend with the POST id 
    foreach($data as $value=>$name)
    {
        echo CHtml::tag('option',array('value'=>$value),CHtml::encode($name),true);
    }

使用Beforesend回调来启动Ajax请求

 echo CHtml::dropDownList('island_id',$island,$locationsList, 
                                array('ajax'=>array('type'=>'POST',


    'url'=>CController::createUrl('supplierHead/getRegions'),
                                                    'update'=>'#region_id',
                                                     'beforeSend'=>function(){
                                                           $('#province_id').empty(); //use here
                                                     }
                                 ),
                                      'id'=>'island_id',
                                      'empty'=>'Choose Island',

                                )); 

我添加了获取值的控制器代码。我只想在设置第一个Dropdownlist时将第三个Dropdownlist设置回null。$('select').empty();单击第一个下拉列表时使用jquery。。你刚刚下载了你的第三个下拉列表。这是在更新之后放置的吗?或者在第一个下拉列表中的任何位置?我对ajax、jquery、javascript不是很在行,我不喜欢stackoverflow!一般来说,不鼓励只使用代码的答案-您可以添加一些解释吗?
$('#island_id').click(function(){
    $('#province_id').empty();
})
 echo CHtml::dropDownList('island_id',$island,$locationsList, 
                                array('ajax'=>array('type'=>'POST',


    'url'=>CController::createUrl('supplierHead/getRegions'),
                                                    'update'=>'#region_id',
                                                     'beforeSend'=>function(){
                                                           $('#province_id').empty(); //use here
                                                     }
                                 ),
                                      'id'=>'island_id',
                                      'empty'=>'Choose Island',

                                ));