layui城市三级联动

通过监听layui的form模块的选择事件,我们可以加载对应的下级数据并动态填充到下级选择框中。在选择省、市和区县时,上一级选择框的值将作为下一级选择框的查询条件。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>城市三级联动</title>
  <link rel="stylesheet" href="https://cdn.staticfile.org/layui/2.5.6/css/layui.css">
</head>
<body>
  
<div class="layui-form">
  <div class="layui-form-item">
    <div class="layui-inline">
      <label class="layui-form-label">省份</label>
      <div class="layui-input-block">
        <select id="province" lay-filter="province">
          <option value="">请选择省</option>
        </select>
      </div>
    </div>
    <div class="layui-inline">
      <label class="layui-form-label">城市</label>
      <div class="layui-input-block">
        <select id="city" lay-filter="city">
          <option value="">请选择市</option>
        </select>
      </div>
    </div>
    <div class="layui-inline">
      <label class="layui-form-label">区县</label>
      <div class="layui-input-block">
        <select id="district" lay-filter="district">
          <option value="">请选择区/县</option>
        </select>
      </div>
    </div>
  </div>
</div>
  
<script>
layui.use(['form'], function(){
  var form = layui.form;
   
  // 加载省份数据
  var provinces = [
    { district_id: 1, district_name: '北京市' },
    { district_id: 2, district_name: '上海市' },
    { district_id: 3, district_name: '广东省' }
    // 其他省份数据...
  ];
  var provinceSelect = $('#province');
  $.each(provinces, function(index, province){
    provinceSelect.append(new Option(province.district_name, province.district_id));
  });
  form.render('select');
   
  // 监听省份选择事件
  form.on('select(province)', function(data){
    var provinceId = data.value;
    if(provinceId){
      // 加载市级数据(这里使用假数据)
      var cities = [
        { district_id: 101, district_name: '市辖区', pid: 1 },
        { district_id: 102, district_name: '市辖区', pid: 2 },
        { district_id: 103, district_name: '广州市', pid: 3 }
        // 其他市级数据...
      ];
      var citySelect = $('#city');
      citySelect.empty().append(new Option('请选择市', ''));
      $.each(cities, function(index, city){
        if(city.pid == provinceId){
            citySelect.append(new Option(city.district_name, city.district_id));
        }
      });
      form.render('select');
    }else{
      $('#city').empty().append(new Option('请选择市', ''));
      $('#district').empty().append(new Option('请选择区/县', ''));
      form.render('select');
    }
  });
   
  // 监听市级选择事件
  form.on('select(city)', function(data){
    var cityId = data.value;
    if(cityId){
      // 加载区县级数据(这里使用假数据)
      var districts = [
        { district_id: 1001, district_name: '东城区', pid: 101 },
        { district_id: 1002, district_name: '西城区', pid: 101 },
        { district_id: 1003, district_name: '黄浦区', pid: 102 },
        { district_id: 1004, district_name: '徐汇区', pid: 102 },
        { district_id: 1005, district_name: '天河区', pid: 103 }
        // 其他区县级数据...
      ];
      var districtSelect = $('#district');
      districtSelect.empty().append(new Option('请选择区/县', ''));
      $.each(districts, function(index, district){
        if(district.pid == cityId){
            districtSelect.append(new Option(district.district_name, district.district_id));
        }
      });
      form.render('select');
    }else{
      $('#district').empty().append(new Option('请选择区/县', ''));
      form.render('select');
    }
  });
});
</script>
  
</body>
</html>

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注