返回

原生JavaScript打造多级地址下拉选择器

前端

构建多级地址选择器

在现代网络应用中,地址选择器是一个非常常见的特征。它允许用户从预先定义的地址列表中快速而轻松地选择地址。通过使用原生 JavaScript,您可以构建一个功能强大的多级地址选择器,让您的用户能够轻松过滤和选择地址信息,如国家、省份和城市。

构建过程

要构建一个多级地址选择器,需要遵循以下步骤:

1. HTML 结构

首先,你需要创建一个基本的 HTML 结构,其中包含一个包含国家、省份和城市三个下拉列表的表单。

<form>
  <select id="country">
    <option value="">选择国家</option>
    <option value="中国">中国</option>
    <option value="美国">美国</option>
    <option value="英国">英国</option>
  </select>
  <select id="province">
    <option value="">选择省份</option>
  </select>
  <select id="city">
    <option value="">选择城市</option>
  </select>
  <input type="submit" value="提交">
</form>

2. JavaScript 代码

接下来,你需要编写 JavaScript 代码来处理事件并填充下拉列表。

// 获取元素
const countrySelect = document.getElementById('country');
const provinceSelect = document.getElementById('province');
const citySelect = document.getElementById('city');

// 国家选择事件
countrySelect.addEventListener('change', function() {
  // 获取选中的国家
  const country = this.value;

  // 根据国家获取省份列表
  const provinces = getProvinces(country);

  // 清空省份和城市下拉列表
  provinceSelect.innerHTML = '<option value="">选择省份</option>';
  citySelect.innerHTML = '<option value="">选择城市</option>';

  // 填充省份下拉列表
  provinces.forEach(province => {
    const option = document.createElement('option');
    option.value = province;
    option.textContent = province;
    provinceSelect.appendChild(option);
  });
});

// 省份选择事件
provinceSelect.addEventListener('change', function() {
  // 获取选中的省份
  const province = this.value;

  // 根据省份获取城市列表
  const cities = getCities(province);

  // 清空城市下拉列表
  citySelect.innerHTML = '<option value="">选择城市</option>';

  // 填充城市下拉列表
  cities.forEach(city => {
    const option = document.createElement('option');
    option.value = city;
    option.textContent = city;
    citySelect.appendChild(option);
  });
});

// 获取省份列表
function getProvinces(country) {
  // 根据国家返回省份列表
  if (country === '中国') {
    return ['北京', '上海', '广东', '四川', '江苏'];
  } else if (country === '美国') {
    return ['纽约', '洛杉矶', '芝加哥', '休斯顿', '费城'];
  } else if (country === '英国') {
    return ['伦敦', '曼彻斯特', '伯明翰', '利物浦', '格拉斯哥'];
  }
  return [];
}

// 获取城市列表
function getCities(province) {
  // 根据省份返回城市列表
  if (province === '北京') {
    return ['东城区', '西城区', '朝阳区', '海淀区', '丰台区'];
  } else if (province === '上海') {
    return ['黄浦区', '徐汇区', '长宁区', '静安区', '浦东新区'];
  } else if (province === '广东') {
    return ['广州市', '深圳市', '佛山市', '东莞市', '中山市'];
  } else if (province === '四川') {
    return ['成都市', '绵阳市', '南充市', '宜宾市', '泸州市'];
  } else if (province === '江苏') {
    return ['南京市', '苏州市', '无锡市', '常州市', '徐州市'];
  } else if (province === '纽约') {
    return ['曼哈顿', '布鲁克林', '皇后区', '布朗克斯', '史坦顿岛'];
  } else if (province === '洛杉矶') {
    return ['洛杉矶市中心', '好莱坞', '圣莫尼卡', '威尼斯海滩', '比佛利山庄'];
  } else if (province === '芝加哥') {
    return ['环路区', '格兰特公园', '千禧公园', '海军码头', '谢德水族馆'];
  } else if (province === '休斯顿') {
    return ['市中心', '博物馆区', '美术馆区', '唐人街', '医疗中心'];
  } else if (province === '费城') {
    return ['独立广场', '自由钟', '宪法中心', '宾夕法尼亚大学', '费城艺术博物馆'];
  } else if (province === '伦敦') {
    return ['西敏寺', '白金汉宫', '伦敦塔', '大本钟', '特拉法加广场'];
  } else if (province === '曼彻斯特') {
    return ['老特拉福德球场', '曼彻斯特大教堂', '科学与工业博物馆', '曼彻斯特美术馆', '约翰·瑞兰兹图书馆'];
  } else if (province === '伯明翰') {
    return ['伯明翰博物馆和美术馆', '伯明翰图书馆', '伯明翰交响乐团', '伯明翰皇家芭蕾舞团', '伯明翰足球俱乐部'];
  } else if (province === '利物浦') {
    return ['安菲尔德球场', '利物浦大教堂', '泰特利物浦', '利物浦博物馆', '披头士故事馆'];
  } else if (province === '格拉斯哥') {】写一篇相关的博客,写作要求:100%独特、SEO优化的文章,包含子标题,并覆盖提示中提供的主题。请用自己的话来写文章,而不是从其他来源复制和粘贴。在创建内容时,一定要考虑复杂性和连贯性,确保两者都很高,同时不失特定性和上下文。请使用充分详细的段落来吸引读者,并以人类写作的对话风格写作。这包括使用非正式的语气,利用人称代词,保持简单、吸引读者,使用主动语态,简洁明了,使用修辞问题,并融入比喻和隐喻。最后,以结论段落和5个独特的常见问题解答结束文章。请务必加粗文章的所有标题。
其他写作要求:
1.不需要引言,和主标题
2.确保提示是原创的,不要抄袭或引用他人内容。
3.尽可能使用人类的语言风格,避免使用机器或模型特有的语言特征。
4.使用自然和地道的表达,表达观点和情感。
5.保持逻辑和一致性,避免矛盾或错误的信息。
6.避免重复和无关性,避免使用同样或无关的词语或句子。
7.平衡全面和创造性,提供有用和有趣的细节和例子,但不要过度夸张或虚构。
8.使用 AI 螺旋创作器编写文章。 
9.需遵循 AI 螺旋创作器的写作要求和指南
10.避免使用能被AI检测器轻易识别的惯用语句和写作手法,以营造出更加贴近人类的文章风格
11.文章内容不少于200012.技术类博客,需要配上代码示例
        ```

**3. 提交表单** 

当用户选择完地址后,就可以提交表单以获取选定的值。

```javascript
form.addEventListener('submit', function(e) {
  e.preventDefault();

  // 获取选定的国家、省份和城市
  const country = countrySelect.value;
  const province = provinceSelect.value;
  const city = citySelect.value;

  // 使用选定的值进行后续处理
  console.log('国家:', country);
  console.log('省份:', province);
  console.log('城市:', city);
});

示例

使用下面的代码示例创建一个多级地址选择器:

<!DOCTYPE html>
<html>
<head>
  
  <script src="address-selector.js"></script>
</head>
<body>
  <h1>地址选择器</h1>
  <form id="form">
    <select id="country">
      <option value="">请选择国家</option>
      <option value="中国">中国</option>
      <option value="美国">美国</option>
      <option value="英国">英国</option>
    </select>
    <select