jQuery三级联动

引言

在一些表单应用中,经常会遇到需要进行三级联动选择的情况。比如选择省份、城市和区县。使用jQuery可以很方便地实现这种三级联动效果。本文将介绍如何使用jQuery实现三级联动,并提供代码示例。

三级联动实现原理

实现三级联动的基本原理是,当第一级选项改变时,触发一个事件,根据选中的值,动态生成第二级的选项;当第二级选项改变时,再触发一个事件,根据选中的值,动态生成第三级的选项。

在实现三级联动前,首先需要准备好相应的数据。以省市区为例,可以使用一个嵌套的JavaScript对象来表示这些数据。

var data = {
  "北京市": {
    "北京市": ["东城区", "西城区", "朝阳区", "丰台区", "石景山区", "海淀区", "门头沟区", "房山区", "通州区", "顺义区", "昌平区", "大兴区", "怀柔区", "平谷区", "密云区", "延庆区"]
  },
  "上海市": {
    "上海市": ["黄浦区", "徐汇区", "长宁区", "静安区", "普陀区", "虹口区", "杨浦区", "闵行区", "宝山区", "嘉定区", "浦东新区", "金山区", "松江区", "青浦区", "奉贤区", "崇明区"]
  },
  // 其他省市区数据...
};

HTML结构

在HTML中,需要使用三个<select>元素来实现三级联动。每个<select>元素都需要添加一个唯一的id,以便通过jQuery选择器来获取和操作。

<select id="province">
  <option value="">请选择省份</option>
</select>

<select id="city">
  <option value="">请选择城市</option>
</select>

<select id="area">
  <option value="">请选择区县</option>
</select>

jQuery代码

在页面加载完成后,使用jQuery的ready函数来绑定事件和初始化第一级选项。

$(document).ready(function() {
  // 初始化第一级选项
  for (var province in data) {
    $("#province").append("<option value='" + province + "'>" + province + "</option>");
  }

  // 第一级选项改变时的事件
  $("#province").change(function() {
    var province = $(this).val();
    $("#city").empty(); // 清空第二级选项
    $("#city").append("<option value=''>请选择城市</option>");

    if (province != "") {
      for (var city in data[province]) {
        $("#city").append("<option value='" + city + "'>" + city + "</option>");
      }
    }
  });

  // 第二级选项改变时的事件
  $("#city").change(function() {
    var province = $("#province").val();
    var city = $(this).val();
    $("#area").empty(); // 清空第三级选项
    $("#area").append("<option value=''>请选择区县</option>");

    if (province != "" && city != "") {
      var areas = data[province][city];
      for (var i = 0; i < areas.length; i++) {
        $("#area").append("<option value='" + areas[i] + "'>" + areas[i] + "</option>");
      }
    }
  });
});

完整示例

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>三级联动示例</title>
  <script src="
  <script>
    // 省市区数据
    var data = {
      "北京市": {
        "北京市": ["东城区", "西城区", "朝阳区", "丰台区", "石景山区", "海淀区", "门头沟区", "房山区", "通州区", "顺义区", "昌平区", "大兴区", "怀柔区