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

时间:2014-03-03 04:38:15

标签: php ajax drop-down-menu

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

 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是父级,当选择一个值时,它会更新第二个下拉列表并使用相对于父级的数据填充它,然后一旦选择了第二个下拉列表的值,它就会填充第三个下拉列表的可用值。

问题:

当所有下拉菜单都设置了值并且我决定更改第一个下拉列表(父项)的值时,它会更新第二个下拉列表的值,但不会更新第三个下拉列表的值。第3个下拉列表仅在我手动更改第2个下拉列表中的值时更新。此外,当第二个下拉列值更改时,第三个下拉列表更新是正确的,但父级不会更改。我该如何解决这个问题?

这是我的控制器:

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 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用Beforesend Callback启动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',

                                ));