在Yii中,下拉列表的值没有正确更新

5

我有三个下拉列表,它们之间有依赖关系。以下是代码:

 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'));

岛屿 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);
    }
}
3个回答

1
 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'));

一切都没问题,你需要展示你的控制器文件

否则就使用这个

它在你的控制器上

    $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);
    }

我添加了控制器代码以获取值。我只是希望每当第一个下拉列表被设置时,第三个下拉列表都能被设置为空。 - remedy.
$('select').empty(); 当单击第一个下拉菜单时使用jQuery...你刚刚清空了第三个下拉菜单。 - Babu

0
$('#island_id').click(function(){
    $('#province_id').empty();
})

这个是放在更新之后吗?还是放在第一个下拉菜单的任何位置?我不太擅长ajax、jquery和javascript哈哈。 - remedy.
欢迎来到Stack Overflow!一般情况下,仅有代码的答案是不被鼓励的 - 你能添加一些解释吗? - Corley Brigman

0
使用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',

                                )); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接