yii 下拉列表多级联动 dropDownList

本文章中用到的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'];
            }
        }


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值