PHP三级联动

57 篇文章 0 订阅
21 篇文章 0 订阅
html部分
<div class="layui-form-item" >
    <label class="layui-form-label"><font style="color: red">*</font>所在地区</label>
    <div class="layui-input-block" style="width:150px;display: inline-block;margin-left: 20px;">
        <select id="province" lay-filter="province" name="province_id">
            <option value="0">请选择省</option>
            <?php foreach ($province_data as $key=>$val) {?>
            <option value="<?=$val['province_id']?>"><?=$val['province']?></option>
            <?php } ?>
        </select>
    </div>
    <div class="layui-input-block" style="width:150px;display: inline-block;margin-left: 10px;">
        <select id="city" lay-filter="city" name="city_id">

        </select>
    </div>
    <div class="layui-input-block" style="width:150px;display: inline-block;margin-left: 10px;">
        <select id="area" lay-filter="area" name="area_id">

        </select>
    </div>
</div>

js部分

//三级联动
layui.use('form', function(){
    var form = layui.form;
    //监听省
    form.on('select(province)', function(data){
        var province_id = data.value;
        if (province_id == '') {
            layer.msg('请选择省',{icon: 2});
            return false;
        }
        //查询省下面的市
        $.post('get-city',{'province_id':province_id},function (res) {
            var html = '<option value="0">请选择市</option>';
            $.each(res, function (i, v){
                html += '<option value="'+v.city_id+'">'+v.city+'</option>';
            });
            //给市赋值
            $("#city").html(html);
            //重新渲染select
            form.render('select');
        });
    });
    //监听市
    form.on('select(city)', function(data){
        city_id = data.value;
        if (city_id == '') {
            layer.msg('请选择市',{icon: 2});
            return false;
        }
        //查询市下面的区
        $.post('get-area',{'city_id':city_id},function (res) {
            var html = '<option value="0">请选择区</option>';
            $.each(res, function (i, v){
                html += '<option value="'+v.area_id+'">'+v.area+'</option>';
            });
            //给市赋值
            $("#area").html(html);
            //重新渲染select
            form.render('select');
        });
    });

});

php部分:

//根据省id获取市
public function getCity($params)
{
    $province_id = (int) $params['province_id'];
    $cities = self::find()->select(['city_id','city'])->where(['province_id' => $province_id])->asArray()->all();
    return $cities;
}

 

//根据市id获取区
public function getArea($params)
{
    $city_id = (int) $params['city_id'];
    $areas = self::find()->select(['area_id', 'area'])->where(['city_id'=>$city_id])->asArray()->all();
    return $areas;
}

 

思路部分

1.前端默认遍历省份信息

2.监听省份下拉框

3.获取省份id查询城市表

4.获取到城市信息后追加到城市下拉框

5.监听城市下拉框

6.获取城市id查询地区表

7.获取到地区信息后追加到地区下拉框

8.高手是不会读到这里的

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
之前从网上找的三级联动都太老了,数据也都是很久之前的数据,所以自己把从国家统计局扒下来的省市三级联动数据做了整理,目前最新的三级联动,童叟无欺。大家看北京市和天津市的几个分区就知道是最新的了。 INSERT INTO `address` VALUES (1, '110000', 0, '北京市', 1); INSERT INTO `address` VALUES (2, '110100', 110000, '市辖区', 2); INSERT INTO `address` VALUES (3, '110101', 110100, '东城区', 3); INSERT INTO `address` VALUES (4, '110102', 110100, '西城区', 3); INSERT INTO `address` VALUES (5, '110105', 110100, '朝阳区', 3); INSERT INTO `address` VALUES (6, '110106', 110100, '丰台区', 3); INSERT INTO `address` VALUES (7, '110107', 110100, '石景山区', 3); INSERT INTO `address` VALUES (8, '110108', 110100, '海淀区', 3); INSERT INTO `address` VALUES (9, '110109', 110100, '门头沟区', 3); INSERT INTO `address` VALUES (10, '110111', 110100, '房山区', 3); INSERT INTO `address` VALUES (11, '110112', 110100, '通州区', 3); INSERT INTO `address` VALUES (12, '110113', 110100, '顺义区', 3); INSERT INTO `address` VALUES (13, '110114', 110100, '昌平区', 3); INSERT INTO `address` VALUES (14, '110115', 110100, '大兴区', 3); INSERT INTO `address` VALUES (15, '110116', 110100, '怀柔区', 3); INSERT INTO `address` VALUES (16, '110117', 110100, '平谷区', 3); INSERT INTO `address` VALUES (17, '110118', 110100, '密云区', 3); INSERT INTO `address` VALUES (18, '110119', 110100, '延庆区', 3); INSERT INTO `address` VALUES (19, '120000', 0, '天津市', 1); INSERT INTO `address` VALUES (20, '120100', 120000, '市辖区', 2); INSERT INTO `address` VALUES (21, '120101', 120100, '和平区', 3); INSERT INTO `address` VALUES (22, '120102', 120100, '河东区', 3); INSERT INTO `address` VALUES (23, '120103', 120100, '河西区', 3); INSERT INTO `address` VALUES (24, '120104', 120100, '南开区', 3); INSERT INTO `address` VALUES (25, '120105', 120100, '河北区', 3); INSERT INTO `address` VALUES (26, '120106', 120100, '红桥区', 3); INSERT INTO `address` VALUES (27, '120110', 120100, '东丽区', 3); INSERT INTO `address` VALUES (28, '120111', 120100, '西青区', 3); INSERT INTO `address` VALUES (29, '120112', 120100, '津南区', 3); INSERT INTO `address` VALUES (30, '120113', 120100, '北辰区', 3); INSERT INTO `address` VALUES (31, '120114', 120100, '武清区', 3); INSERT INTO `address` VALUES (32, '120115', 120100, '宝坻区', 3); INSERT INTO `address` VALUES (33, '120116', 120100, '滨海新区', 3); INSERT INTO `address` VALUES (34, '120117', 120100, '宁河区', 3); INSERT INTO `address` VALUES (35, '120118', 120100, '静海区', 3); INSERT INTO `address` VALUES (36, '120119', 120100, '蓟州区', 3);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值