美文网首页
thinkPHP省市区三级联动

thinkPHP省市区三级联动

作者: 雨哥 | 来源:发表于2020-10-30 09:34 被阅读0次

    先上效果


    image.png

    html部分,这个是基于bootstarp的,需要引入相应的文件。

    <div class="form-group">
      <label>所在地</label>
      <input type="hidden" class="form-control" name="domicile" id="domicile" value=""/>
      <div class="col-sm-12">
        <div class="col-sm-4">
          <select name="input_province" id="province" class="form-control">
            <option value="">--请选择--</option>
          </select>
        </div>
        <div class="col-sm-4">
          <select name="input_city" id="city" class="form-control"> </select>
        </div>
        <div class="col-sm-4">
          <select name="input_area" id="area" class="form-control"> </select>
        </div>
      </div>
    </div>
    

    js部分

    /**
         * 地区选择三级联动
         * @param provinceId 省下拉选项框ID
         * @param cityId 市下拉选项框ID
         * @param areaId 区下拉选项框ID
         * @param valId  隐藏输入框ID
         */
        function selectCity(provinceId, cityId, areaId, valId) {
            var provinceId = "#" + provinceId;
            var cityId = "#" + cityId;
            var areaId = "#" + areaId;
            var valId = "#" + valId;
            var data = {:json_encode($city)};
            //console.log(data);
            //操作DOM,加载数据到下拉列表 foreach
            $.each(data, function (index, item) { //循环data数据中每一个
                $(provinceId).append("<option value=" + index + ">" + item.name + "</option>");
    
            });
            //点击不同的省,加载市
            $(provinceId).bind("change", function () {
                //得到哪个省被点击
    
                var province = $(this).val();//得到当前省份
                $(valId).val(province);
                var city = data[province].child;//得到当前省份的所有城市
                //加载该省的数据
    
                $(cityId).empty();//重新选择省时候清空城市列表
                $(areaId).empty();//重新选择省时候清空区列表
                $(cityId).append("<option>请选择</option>");
                $.each(city, function (index2, item) {
    
                    $(cityId).append("<option value=" + index2 + ">" + item.name + "</option>");
    
                });
    
            });
    
            $(cityId).bind("change", function () {
    
                $(areaId).empty();//重新选择城市时候清空区列表
                $(areaId).append("<option>请选择</option>");
    
                var province = $(provinceId).val(); //得到当前省
                var citynum = $(this).val();//得到当前城市
                $(valId).val(citynum);
                //console.log(data[province].child[citynum]);
                var are = data[province].child[citynum].child; //得到当前城市所对应的城区
    
    
                $.each(are, function (index3, item) {
                    $(areaId).append("<option value=" + index3 + ">" + item.name + "</option>");
    
                });
    
            });
            $(areaId).bind("change", function () {
                $(valId).val($(this).val());
            });
    
    
        }
    //在这里使用
    $(document).ready(
            selectCity("province", "city", "area", "domicile")
        );
    
    

    PHP代码

    //三级联动地区
            $list = Db::name('region')->select();
            foreach ($list as $val) {
                $items[$val['id']] = $val;
            }
            foreach ($items as $item) {
                $items[$item['parent_id']]['child'][$item['id']] = &$items[$item['id']];
            }
            $this->assign('city', $items[0]['child']);
    

    数据库文件

    https://gitee.com/kltt22/code-block/blob/master/mo_region.sql
    

    相关文章

      网友评论

          本文标题:thinkPHP省市区三级联动

          本文链接:https://www.haomeiwen.com/subject/gjvrvktx.html