Yii2 二级联动 DropDownList

先随手建库 CIty 和Province

| province | CREATE TABLE `province` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `province` varchar(255) NOT NULL,
  `provinceid` int(10) unsigned NOT NULL COMMENT '省份id,外联市区id',
  PRIMARY KEY (`id`),
  KEY `provinceid` (`provinceid`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 |

| city  | CREATE TABLE `city` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cityid` int(10) unsigned NOT NULL,
  `city` varchar(50) NOT NULL,
  `provinceid` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `provinceid` (`provinceid`),
  KEY `cityid` (`cityid`),
  CONSTRAINT `city_ibfk_1` FOREIGN KEY (`provinceid`) REFERENCES `province` (`provinceid`)
) ENGINE=InnoDB AUTO_INCREMENT=346 DEFAULT CHARSET=utf8 COMMENT='行政区域地州市信息表' |

然后随手再点个Users的库

| users | CREATE TABLE `users` (
  `uid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user` int(11) NOT NULL,
  `name` varchar(200) NOT NULL DEFAULT '',
  `desc` text NOT NULL,
  `cityid` int(10) unsigned NOT NULL,
  `provinceid` int(10) unsigned NOT NULL,
  PRIMARY KEY (`uid`),
  KEY `city_id` (`cityid`),
  KEY `provinceid` (`provinceid`),
  CONSTRAINT `users_ibfk_2` FOREIGN KEY (`cityid`) REFERENCES `city` (`cityid`),
  CONSTRAINT `users_ibfk_1` FOREIGN KEY (`provinceid`) REFERENCES `province` (`provinceid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

好了,后面喜欢的话就添加点数据, 接下来开始写代码.

只要需要2步 View.php中代码如下

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use app\models\Province;
use app\models\City;
?>

<div class="users-form" id="area">
    <?php $form = ActiveForm::begin(); ?>
    <?= $form->field($model, 'user')->textInput() ?>
    <?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
    <?= $form->field($model, 'provinceid')->label('Province')->dropDownlist(
        Province::find()
            ->select(['province','provinceid'])
            ->indexBy('provinceid')
            ->column(),
            [
                'prompt'=>'请选择省份',
                 'onchange'=>'
                    $.post("index.php?r=users/list&id='.'"+$(this).val(),function(data){
                    //'onchange'=>'$.post("/index/list.html?id='.'"+$(this).val(),function(data){
                        $("select#users-cityid").html(data);
                    });',
            ]
    ) ?>
    <?= $form->field($model, 'cityid')->dropDownList(
        City::find()->select(['city','cityid'])->indexBy('cityid')->column(),
        [
            'prompt'=>'选择市区',
        ]
    ) ?>
    <?= $form->field($model, 'desc')->textarea(['rows' => 10]) ?>
    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>
    <?php ActiveForm::end(); ?>
</div>

上面问题最关键的就是onchange方法. 是用ajax调取Controller来影响下面的栏

Controller中代码如下

public static function actionList($id=230000)  //这个$id调试用,可以直观看到调试数据又没问题
    {
        $countCities = City::find()->where('provinceid=:id',[':id'=>$id])
                    ->count();
                $cities = City::find()->where('provinceid=:id',[':id'=>$id])
                    ->all();
                if ($countCities > 0) {
                    foreach ($cities AS $city) {
                        echo "<option value='" . $city->cityid . "'>" . $city->city. "</option>";
                    }
                } else {
                    echo "<option>-</option>";
                }
    }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值