当前位置:首页 > JavaScript

js实现联动

2026-02-02 04:37:09JavaScript

JavaScript 实现联动效果

联动效果通常指两个或多个下拉菜单、输入框等元素之间的动态关联,常见于省市区选择、分类筛选等场景。以下是几种实现方式:

基于事件监听的基础联动

通过监听第一个下拉菜单的change事件,动态更新第二个下拉菜单的选项:

js实现联动

// HTML结构示例
// <select id="province"></select>
// <select id="city"></select>

const provinceSelect = document.getElementById('province');
const citySelect = document.getElementById('city');

// 省份数据
const data = {
  '江苏': ['南京', '苏州', '无锡'],
  '浙江': ['杭州', '宁波', '温州']
};

// 初始化省份选项
Object.keys(data).forEach(province => {
  const option = document.createElement('option');
  option.value = province;
  option.textContent = province;
  provinceSelect.appendChild(option);
});

// 联动逻辑
provinceSelect.addEventListener('change', function() {
  // 清空城市选项
  citySelect.innerHTML = '<option value="">请选择城市</option>';

  // 获取当前选中省份
  const selectedProvince = this.value;

  // 添加对应城市选项
  if (selectedProvince && data[selectedProvince]) {
    data[selectedProvince].forEach(city => {
      const option = document.createElement('option');
      option.value = city;
      option.textContent = city;
      citySelect.appendChild(option);
    });
  }
});

使用数据绑定框架(Vue示例)

现代前端框架可以更简洁地实现联动:

// Vue组件示例
new Vue({
  el: '#app',
  data: {
    selectedProvince: '',
    selectedCity: '',
    provinces: ['江苏', '浙江'],
    cities: [],
    cityData: {
      '江苏': ['南京', '苏州', '无锡'],
      '浙江': ['杭州', '宁波', '温州']
    }
  },
  watch: {
    selectedProvince(newVal) {
      this.cities = this.cityData[newVal] || [];
      this.selectedCity = '';
    }
  }
});

对应HTML模板:

js实现联动

<div id="app">
  <select v-model="selectedProvince">
    <option value="">请选择省份</option>
    <option v-for="p in provinces" :value="p">{{ p }}</option>
  </select>

  <select v-model="selectedCity">
    <option value="">请选择城市</option>
    <option v-for="c in cities" :value="c">{{ c }}</option>
  </select>
</div>

多级联动实现

对于三级联动(如省市区),可采用递归或嵌套数据结构:

const threeLevelData = {
  '华东': {
    '江苏': ['南京', '苏州'],
    '浙江': ['杭州', '宁波']
  },
  '华北': {
    '北京': ['朝阳区', '海淀区'],
    '天津': ['和平区', '河西区']
  }
};

// 实现逻辑与二级联动类似,增加一级监听

异步数据加载

当联动数据需要从后端获取时:

document.getElementById('province').addEventListener('change', async function() {
  const provinceId = this.value;
  const citySelect = document.getElementById('city');

  try {
    const response = await fetch(`/api/cities?province=${provinceId}`);
    const cities = await response.json();

    citySelect.innerHTML = cities.map(city => 
      `<option value="${city.id}">${city.name}</option>`
    ).join('');
  } catch (error) {
    console.error('获取城市数据失败', error);
  }
});

注意事项

  • 初始状态处理:确保次级菜单在上级未选择时禁用或清空
  • 数据一致性:避免因异步加载导致的选择冲突
  • 性能优化:大数据量时考虑虚拟滚动或分页加载
  • 用户体验:可添加加载状态提示

以上方法可根据具体需求组合使用,现代项目推荐使用框架实现以提升可维护性。

标签: js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…