当前位置: 首页 > article >正文

省市区三级联动

引言

在网页中,经常会遇到需要用户选择地区的场景,如注册表单、地址填写等。为了提供更好的用户体验,我们可以实现一个三级联动的地区选择器,让用户依次选择省份、城市和地区。

效果展示:

只有先选择省份后才可以选择市和区

实现思路

整体实现思路是通过 JavaScript 异步请求一个包含地区数据的 JSON 文件,将数据解析后根据用户的选择动态更新下拉框选项,最终实现三级联动效果。当用户完成地区选择后,会弹出一个提示框显示所选的地区信息,提示框会在 2 秒后自动消失。

HTML 结构搭建

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        #showPlace {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.7);
            color: white;
            align-items: center;
            z-index: 9999;
            text-align: center;
            line-height: 500px;
            display: none;
        }

        #textCenter {
            text-align: center;
        }

        #textCenter select {
            height: 50px;
            width: 200px;
            text-align: center;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <div id="textCenter">
        <select id="province" onchange="cityData()">
            <option>---请选择省---</option>
        </select>
        <select id="city" onchange="regionData()">
            <option>---请先选择省---</option>
        </select>
        <select id="region" onchange="showAlert()">
            <option>---请先选择省---</option>
        </select>
    </div>

    <div id="showPlace">
        <h1>您所在的地区为:</h1>
    </div>

    <script>
        // ... JavaScript 代码 ...
    </script>
</body>
  • 创建了三个 select 元素,分别用于选择省份、城市和地区,并为每个 select 元素设置了初始提示选项。
  • onchange 事件分别绑定了相应的 JavaScript 函数,用于在用户选择选项时更新下拉框内容或显示提示框。

JavaScript 逻辑实现

        1.声明一个变量 data,用于存储从 ./js/threeGet.json 文件中获取的地区数据。此时变量未赋值,值为 undefined

let data;

       2. 这部分代码创建了一个 XMLHttpRequest 对象,以异步 GET 请求的方式从 ./js/threeGet.json 文件获取数据,发送请求后监听其状态变化,当请求完成且响应状态码为 200 时,将响应的 JSON 文本解析为 JavaScript 对象,随后调用 showProvince 函数对解析后的数据进行渲染处理。

			let xhr = new XMLHttpRequest();
			xhr.open('get', './js/threeGet.json', true);
			xhr.send();
			xhr.onreadystatechange = function() {
				if (xhr.readyState == 4 && xhr.status == 200) {
					let text = xhr.responseText;
					// console.log(text);
					data = JSON.parse(text);
					// console.log(data);
					// 渲染函数
					showProvince(data);
					// console.log(data);
				}
			};

       

        3.分别通过 document.getElementById 方法获取 HTML 文档中 id 为 provincecityregion 和 showPlace 的元素,并将它们存储在对应的变量中。

let province = document.getElementById('province');
let city = document.getElementById('city');
let region = document.getElementById('region');
let showPlace = document.getElementById('showPlace');

         4.渲染省份函数:定义一个名为 showProvince 的函数,用于渲染省份下拉框的选项。初始化变量 provinceStr,并赋值为一个禁用且默认选中的 <option> 元素,作为提示信息。使用 for 循环遍历 data 数组,将每个省份的名称拼接成 <option> 元素字符串,并添加到 provinceStr 中。将拼接好的 option 元素字符串赋值给 province 下拉框的 innerHTML 属性,从而更新下拉框的选项。

function showProvince(data) {
    let provinceStr = `<option disabled selected>--请选择省份--</option>`;
    for (let i = 0; i < data.length; i++) {
        provinceStr += `<option >${data[i].province}</option>`;
    }
    province.innerHTML = provinceStr;
}

        5.渲染市级函数:定义一个名为 cityData 的函数,该函数会在用户选择省份后触发(通过 onchange 事件)。初始化变量 cityStr 和 regionStr,分别用于存储城市和地区下拉框的选项字符串,并设置默认的提示信息。使用外层 for 循环遍历 data 数组,检查每个省份是否与用户选择的省份相同。如果找到匹配的省份,则使用内层 for 循环遍历该省份下的所有城市,并将城市名称拼接成 <option> 元素字符串,添加到 cityStr 中。最后,将 cityStr 赋值给 city 下拉框的 innerHTML 属性,更新城市下拉框的选项;将 regionStr 赋值给 region 下拉框的 innerHTML 属性,重置地区下拉框的选项为提示信息。

function cityData() {
    let cityStr = `<option value="" disabled selected>--请选择城市--</option>`;
    let regionStr = `<option value="" disabled selected>--请先选择城市后选择地区--</option>`;
    for (let i = 0; i < data.length; i++) {
        if (data[i].province == province.value) {
            for (let s = 0; s < data[i].child.length; s++) {
                cityStr += `<option>${ data[i].child[s].city}</option>`;
            }
        }
    }
    city.innerHTML = cityStr;
    region.innerHTML = regionStr;
}

        6.渲染区级函数:定义一个名为 regionData 的函数,该函数会在用户选择城市后触发(通过 onchange 事件)。初始化变量 regionStr,用于存储地区下拉框的选项字符串,使用三层嵌套的 for 循环:外层 for 循环遍历 data 数组,找到用户选择的省份。第二层 for 循环遍历该省份下的所有城市,找到用户选择的城市。内层 for 循环遍历该城市下的所有地区,并将地区名称拼接成 <option> 元素字符串,添加到 regionStr 中。最后,将 regionStr 赋值给 region 下拉框的 innerHTML 属性,更新地区下拉框的选项。

function regionData() {
    let regionStr = `<option value="" disabled selected>--请选择地区--</option>`;
    for (let i = 0; i < data.length; i++) {
        if (data[i].province == province.value) {
            for (let s = 0; s < data[i].child.length; s++) {
                if (data[i].child[s].city == city.value) {
                    for (let c = 0; c < data[i].child[s].child.length; c++) {
                        regionStr += `<option>${data[i].child[s].child[c]}</option>`;
                    }
                }
            }
        }
    }
    region.innerHTML = regionStr;
}

        7.地区信息框 :定义一个名为 showAlert 的函数,该函数会在用户选择地区后触发(通过 onchange 事件)。构建一个包含用户所选省份、城市和地区信息的 HTML 字符串 str,并将地区信息用红色显示。将 str 赋值给 showPlace 元素的 innerHTML 属性,更新提示框的内容。将 showPlace 样式设置为 "block",显示出来。使用 setTimeout 函数设置一个定时器,在 2000 毫秒后将 showPlace 元素的样式设置为 "none",隐藏起来。

function showAlert() {
    let str = `<h1>您所在的地区为:<span style="color: red;">${province.value} ${city.value} ${region.value}</span></h1>`;
    showPlace.innerHTML = str;
    showPlace.style.display = "block";
    setTimeout(function() {
        showPlace.style.display = "none";
    }, 2000)
}


http://www.kler.cn/a/518710.html

相关文章:

  • Qt Designer and Python: Build Your GUI
  • 利用Qt5.15.2编写Android程序时遇到的问题及解决方法
  • 景联文科技加入AIIA联盟数据标注分委会
  • 算法每日双题精讲 —— 二分查找(寻找旋转排序数组中的最小值,点名)
  • Hook 函数
  • 可以称之为“yyds”的物联网开源框架有哪几个?
  • centos操作系统上以service形式运行blackbox_exporter监控网页端口
  • 【JAVA 基础 第(20)课】JDBC JAVA 连接 MySql 数据库
  • [C++技能提升]类型归一
  • 定位的主要知识
  • OpenCV:图像处理中的低通滤波
  • 小哆啦解题记:寻找最后一个单词的“长度”
  • 数据结构与算法分析:专题内容——人工智能中的寻路6之NegMax(代码详解)
  • 链式存储结构
  • 详解生成对抗网络(GAN)模型
  • Oracle迁移DM数据库
  • Facebook 元宇宙与全球文化交流的新趋势
  • 1.CSS的三大特性
  • 【Address Overfitting】解决过拟合的三种方法
  • 刷题总结 回溯算法
  • python3+TensorFlow 2.x(二) 回归模型
  • 理解神经网络:Brain.js 背后的核心思想
  • TMC2224替换DRV8824
  • win32汇编环境,函数的编写与调用、传值或返回值等
  • PyQt4 的图片切割编辑器
  • RocketMQ优势剖析-集成云原生环境