首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >下拉列表值在Yii中未正确更新

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

Stack Overflow用户
提问于 2014-03-03 12:38:15
回答 3查看 649关注 0票数 5

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

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

问题:

当所有下拉列表都设置了值时,我决定更改第一个下拉列表(parent)的值,它会更新第二个下拉列表的值,但不会更新第三个下拉列表的值。只有当我手动更改第二个下拉列表中的值时,第三个下拉列表才会更新。此外,当第二个下拉值更改时,第三个下拉值将更新正确的下拉值,但父级不会更改。我该如何解决这个问题呢?

这是我的控制器:

代码语言:javascript
运行
复制
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);
    }
}
EN

回答 3

Stack Overflow用户

发布于 2014-03-04 12:51:22

代码语言:javascript
运行
复制
 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'));

好了,你必须显示你的控制器文件

或者使用这个

它在你的控制器上

代码语言:javascript
运行
复制
    $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
EN

Stack Overflow用户

发布于 2014-03-04 13:13:14

代码语言:javascript
运行
复制
$('#island_id').click(function(){
    $('#province_id').empty();
})
票数 0
EN

Stack Overflow用户

发布于 2014-03-04 13:21:21

使用Beforesend回调来发起Ajax请求

代码语言:javascript
运行
复制
 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',

                                )); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22138771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档