我有三个相互依赖的下拉列表。这是代码:
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);
}
}
答案 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',
));