当前位置:首页 > JavaScript

js实现省市联动

2026-03-01 04:52:18JavaScript

实现省市联动的方法

省市联动是常见的表单交互需求,通常指选择省份后动态加载对应的城市列表。以下是使用纯JavaScript实现的几种方法:

数据结构准备

采用对象存储省市数据,键为省份名,值为城市数组:

js实现省市联动

const provinceCityData = {
  "北京市": ["东城区", "西城区", "朝阳区"],
  "上海市": ["黄浦区", "徐汇区", "浦东新区"],
  "广东省": ["广州市", "深圳市", "珠海市"]
};

HTML结构

创建两个select元素分别用于选择省份和城市:

<select id="province"></select>
<select id="city"></select>

初始化省份下拉框

页面加载时填充省份选项:

js实现省市联动

const provinceSelect = document.getElementById('province');
Object.keys(provinceCityData).forEach(province => {
  const option = document.createElement('option');
  option.value = province;
  option.textContent = province;
  provinceSelect.appendChild(option);
});

绑定change事件

当省份选择变化时更新城市列表:

provinceSelect.addEventListener('change', function() {
  const citySelect = document.getElementById('city');
  citySelect.innerHTML = ''; // 清空现有选项

  const selectedProvince = this.value;
  const cities = provinceCityData[selectedProvince];

  cities.forEach(city => {
    const option = document.createElement('option');
    option.value = city;
    option.textContent = city;
    citySelect.appendChild(option);
  });
});

优化建议

对于实际项目,可以考虑以下优化:

  • 使用AJAX从服务器动态获取省市数据
  • 添加默认提示选项如"请选择省份"
  • 实现三级联动(省-市-区县)
  • 使用数据缓存减少重复请求

完整示例代码

<!DOCTYPE html>
<html>
<head>
  <title>省市联动示例</title>
</head>
<body>
  <select id="province"></select>
  <select id="city"></select>

  <script>
    const provinceCityData = {
      "北京市": ["东城区", "西城区", "朝阳区"],
      "上海市": ["黄浦区", "徐汇区", "浦东新区"],
      "广东省": ["广州市", "深圳市", "珠海市"]
    };

    window.onload = function() {
      const provinceSelect = document.getElementById('province');
      const citySelect = document.getElementById('city');

      // 添加默认选项
      const defaultOption = document.createElement('option');
      defaultOption.value = '';
      defaultOption.textContent = '请选择省份';
      provinceSelect.appendChild(defaultOption);

      // 填充省份
      Object.keys(provinceCityData).forEach(province => {
        const option = document.createElement('option');
        option.value = province;
        option.textContent = province;
        provinceSelect.appendChild(option);
      });

      // 监听省份变化
      provinceSelect.addEventListener('change', function() {
        citySelect.innerHTML = '';
        const defaultCityOption = document.createElement('option');
        defaultCityOption.value = '';
        defaultCityOption.textContent = '请选择城市';
        citySelect.appendChild(defaultCityOption);

        const selectedProvince = this.value;
        if (selectedProvince) {
          const cities = provinceCityData[selectedProvince];
          cities.forEach(city => {
            const option = document.createElement('option');
            option.value = city;
            option.textContent = city;
            citySelect.appendChild(option);
          });
        }
      });
    };
  </script>
</body>
</html>

以上实现方案适用于大多数前端场景,可根据实际需求进行调整和扩展。

标签: 省市js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: In…