本文詳細講述了yii實現級聯下拉菜單的方法,具體步驟如下:
1.模版中加入如下代碼:
<?php
echo $form->dropDownList($model, 'src_type_id', OrderSrc::options(), array(
<span style="white-space:pre"> </span>'id' => 'task-order-src-id',
));
echo $form->dropDownList($model, 'src_shop_id', array(''=>'全部'), array(
<span style="white-space:pre"> </span>'id' => 'task-shop-id',
))
?>
在這段代碼中,OrderSrc_options() 這個是先讀取一個下拉菜單。調用OrderScr model中的options方法。內容如下
public static function options($hasShop = true) {
$model = new self();
if($hasShop) $model->hasShop();
$models = $model->findAll();
$array = array(''=>'全部');
foreach($models as $model) {
$array[$model->src_id] = $model->src_name;
}
return $array;
}
2.然後在模版頁面中增加JS代碼,實現當第一個下拉菜單變化時給第二個下拉菜單進行內容賦值。
<script type='text/javascript'>
$().ready(function(e) {
$('#task-order-src-id').change(function(e) {
refreshShops();
});
refreshShops();
function refreshShops() {
$.get('<?php echo $this->createUrl('getShops')?>', {
'srcId': $('#task-order-src-id').val()
}, function(html_content) {
$('#task-shop-id')
.html(html_content)
.find('option[value=<?php echo $model->src_shop_id?>]')
.attr('selected', 'selected');
});
}
});
</script>
在這段JS代碼中,實現調取一個程序獲取第二個下拉菜單的值(調用Controller中的actionGetShops方法),任何追加到第二個下拉菜單中。
Controller中的actionGetShops方法如下:
public function actionGetShops() {
$srcId = $_GET['srcId'];
$array = ThirdpartInterfaceConfig::options($srcId);
$htmlContent = "<option value=''>全部</options>";
foreach($array as $k=>$v) {
$htmlContent .= "<option value='{$k}'>{$v}</option>";
}
echo $htmlContent;
}