本文章中用到的TblArea模型的sql文件地址:http://download.csdn.net/detail/aa1049372051/7024519
视图代码
<?php
//获取地区一级划分(省级)
$state_data = TblArea::model()->findAll("grade=:grade", array(":grade" => 1));
//把一级划分数据转化为数组array(id,name)
$state = CHtml::listData($state_data, "id", "name");
//默认被选中项(主要用在yii create update更新数据中,如果是创造数据,默认选中为空,如果是更新数据,默认选中就是数据库中信息(model就是存放数据地址的表的模型))
//$s_default = $model->isNewRecord ? '' : $model->state;
$s_default='';
echo CHtml::dropDownList('province', $s_default , $state,array('empty'=>'--请选择省份--',
'id' => 'province',
'ajax'=>array(
'type'=>'POST',
'url'=>Yii::app()->createUrl('site/getcitylists'),
'update'=>'#city',
'data'=>array('province_id'=>'js:$("#province").val()'),
)
)
);
echo " ";
echo Chtml::dropDownList('city', '',array('--请选择城市--'), array(
'class' => 'width90 select',
'id' => 'city',
'empty' => '请选择城市',
'ajax' => array(
'type' => 'POST', //request type
'url' => Yii::app()->createUrl('site/getdistrictlists'),
'update' => '#area', //lector to update
'data' => 'js:"city_id="+jQuery(this).val()',
)));
echo " ";
echo CHtml::dropDownList('area', '', array('--请选择地区--'));
echo '<br><br>';
echo CHtml::button('提交', array('id'=>'button1'));
echo '<br><br>';
echo "<div style='display:none;' id='div1'>";
echo CHtml::label('', '', array('id'=>'label1',));
echo "</div>";
?>
<script type="text/javascript">
$(function(){
// $("input[name=CompanyType]:eq(0)").attr("checked",'checked');
$("#province").change(function(){
if($(this).val()){
var province=$(this).val();
var url= '<?php echo Yii::app()->createUrl('/site/getarealists')?>';
$.getJSON(url,{province:province},function(data){
if(data!=''){
$("#area").empty();
$.each(data, function(key,val){
jQuery("<option value='"+key+"'>"+val+"</option>").appendTo("#area");
});
}
});
}else{
$("#area").empty();
$("<option value=''>请选择地区</option>").appendTo("#area");
}
});
$('#button1').click(function()
{
var state=$('#province').val();
var city=$('#city').val();
var area=$('#area').val();
var url="getdata";
$.ajax({
type: "post",
//dataType: 'json',
url: url,
data:{'YII_CSRF_TOKEN':'<?php echo Yii::app()->request->csrfToken?>',"state":state,"city":city,'area':area},
cache: false,
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
},
success:function(data){
if(data)
{
$("#label1").text(data);
$("#div1").toggle();
}
}
});
});
});
</script>
控制器中
//省级变动获取省级下属城市列表
public function actionGetcitylists()
{
if(isset($_POST['province_id'])&&$_POST['province_id'])
{
$province_id = $_POST['province_id'];
$data = TblArea::model()->findAll("parent_id=:parent_id", array(":parent_id" => $province_id));
$data = CHtml::listData($data, "id", "name");
foreach ($data as $value => $name) {
echo CHtml::tag("option", array("value" => $value), CHtml::encode($name), true);
}
}
else
{
echo CHtml::tag("option", array("value" => ''), '请选择城市', true);
}
}
//城市变动获取城市下属城区列表
public function actionGetdistrictlists()
{
if(isset($_POST['city_id'])&&$_POST['city_id'])
{
$city_id = $_POST['city_id'];
$data = TblArea::model()->findAll("parent_id=:parent_id", array(":parent_id" => $city_id));
$data = CHtml::listData($data, "id", "name");
foreach ($data as $value => $name) {
echo CHtml::tag("option", array("value" => $value), CHtml::encode($name), true);
}
}
else
{
echo CHtml::tag("option", array("value" => ''), '请选择地区', true);
}
}
//省级变动获取第一个下属城市的城区列表
public function actionGetarealists()
{
if(isset($_GET['province'])&&$_GET['province'])
{
$province_id = $_GET['province'];
$data = TblArea::model()->findAll("parent_id=:parent_id", array(":parent_id" => $province_id));
foreach ($data as $city) {
$arealists=TblArea::model()->findAll("parent_id=:parent_id", array(":parent_id" => $city->id));
$areadata = CHtml::listData($arealists, "id", "name");
break;
}
echo json_encode($areadata);
}
}
public function actionGetdata()
{
if($_POST)
{
$state=$_POST['state'];
$city=$_POST['city'];
$area=$_POST['area'];
$statedata = TblArea::model()->find("id=:state", array(":state" => $state));
$citydata = TblArea::model()->find("id=:city", array(":city" => $city));
$areadata = TblArea::model()->find("id=:area", array(":area" => $area));
echo $statedata['name'].' '.$citydata ['name'].' '.$areadata['name'];
}
}