入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

yii 下拉列表多级联动 dropDownList

创建时间:2014-03-11 投稿人: 浏览次数:6238

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


声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。