yii2 dropDownList三级联动

项目中有一个省市县的修改,这下要做个三级联动的列表,直接上代码:

一. controller控制器中:

    /**
     * 地区三联表展示
     */
    public function actionSite($pid,$typeid=0){
        $model = new Provinces();
        $region = $model::find()->select('id,title,pid')->where(['pid' => $pid])->asArray()->all();
        if($typeid == 1){
            $notice="--请选择地市--";
        }else if($typeid == 2 && $region){
            $notice="--请选择区县--";
        }
        echo Html::tag('option',$notice, ['value'=>'0']) ;
        foreach($region as $name) { //控制器中的site方法中用到了html::tag,请使用命名空间use yii\helpers\Html;否则无法正确输出。
            echo Html::tag('option',Html::encode($name['title']),array('value' => $name['id']));
        }
    }

二. view中查询方法:

<td class="province">
   <?= $form->field($model,'province')->dropDownList(
      [ 0 => $pname['title'] ? $pname['title'] : '请选择省份']+Provinces::getRegion(0), [
           'onchange'=>'
              $(".province").hide();
              $.post("'.yii::$app->urlManager->createUrl('/bid/tenders/site').'?typeid=1&pid="+$(this).val(),function(data){
                    $("#tender-city").html(data);//post传值,返回结果调用city中的样式
              });',
       ])
    ?>
 </td>
 <td class="city">
    <?= $form->field($model, 'city')->dropDownList(
        [ 0 => $cname['title'] ? $cname['title'] : '请选择地市']+Provinces::getRegion($model['province']),[
            'onchange'=>'
                 $(".province").show();
                 $.post("'.yii::$app->urlManager->createUrl('/bid/tenders/site').'?typeid=2&pid="+$(this).val(),function(data){                        
                     $("#tender-county").html(data);//post传值,返回结果调用county中的样式
                 });',
             ])
     ?>
</td>
<td class="county">
    <?= $form->field($model, 'county')->dropDownList(
        [0 => $tname['title'] ? $tname['title'] : '请选择区县']+Provinces::getRegion($model['city'])) 
    ?>
</td>

三. view中getRegion方法查询下级数据:

    use yii\helpers\ArrayHelper;

    public static function getRegion($parent_id=0)
    {
        $regions = provinces::find()->where(['pid'=>$parent_id])->asArray()->all();
        return ArrayHelper::map($regions, 'id', 'title');
    }

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值