【JavaScript】原生js实现省市区联动效果

简介: 用原生js实现省市区联动

【前言】今日在复习省市县三级联动的时候,有点忘了原生的js应该怎么样处理省市县的联动,特此写下来再次复习下

⭐实现思路

1.获取相对应的DOM对象

2.写省市县接口获取到接口信息

3.写下change事件,有变化时调用接口

⭐思路转化为代码

1.获取相对应的DOM对象

首先的话,我们先写一下静态的页面结构

(以下是关键代码)

<div class="row mb-3">
              <label class="col-sm-2 col-form-label-sm">籍贯</label>
              <div class="col-sm-3">
                <select class="form-select form-select-sm" name="province">
                  <option selected value="">--省--</option>
                </select>
              </div>
              <div class="col-sm-3">
                <select class="form-select form-select-sm" name="city">
                  <option selected value="">--市--</option>
                </select>
              </div>
              <div class="col-sm-3">
                <select class="form-select form-select-sm" name="county">
                  <option selected value="">--区/县--</option>
                </select>
              </div>
            </div>

用js获取相对应的DOM

//   三省联动dom节点的获取
const province = document.querySelector('[name="province"]')
const city = document.querySelector('[name="city"]')
const county = document.querySelector('[name="county"]')

2.写省市县接口获取到接口信息

const getProvince = async () => {
    const { data } = await axios.get('/geo/province')
    console.log(data);
    province.innerHTML = `<option value=""> --省份-- </option>` + data.map(item => `<option value="${item}"> ${item} </option>`).join('')
}
const getCity = async () => {
    const { data } = await axios.get(`/geo/city?pname=${province.value}`)
    console.log(data);
    city.innerHTML = `<option value=""> --市-- </option>` + data.map(item => `<option value="${item}"> ${item} </option>`).join('')
}
const getCounty = async () => {
    const { data } = await axios.get(`/geo/county?pname=${province.value}&cname=${city.value}`)
    console.log(data);
    county.innerHTML = `<option value=""> --区/县-- </option>` + data.map(item => `<option value="${item}"> ${item} </option>`).join('')
}

注意点:option的值是通过value获取,map需要与joio一起使用(map返回值是产生新的数组,join将与其拼接)

3.写下change事件,有变化时调用接口

//  change事件
province.addEventListener('change', function () {
    getCity()
    county.innerHTML = `<option value=""> --区/县-- </option>`
})
// 市change事件
city.addEventListener('change', function () {
    getCounty()
})

注意点:注意联级调用,一层层的触发的呦。

⭐ 效果查看

5571aa1aa9db442294cc7d3c9b5ab525.gif


相关文章
|
11天前
|
JavaScript 前端开发 测试技术
盘点原生JavaScript中直接触发事件的方式
本文全面探讨了原生JavaScript中触发事件的多种方式,包括`dispatchEvent`、`Event`构造函数、`CustomEvent`构造器、直接调用事件处理器以及过时的`createEvent`和`initEvent`方法。通过技术案例分析,如模拟点击事件、派发自定义数据加载事件和实现提示框系统,帮助开发者掌握这些方法在实际开发中的应用,提升灵活性与兼容性。
28 3
|
2月前
|
JavaScript 前端开发
【JavaScript】——JS基础入门常见操作(大量举例)
JS引入方式,JS基础语法,JS增删查改,JS函数,JS对象
|
3月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
3月前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
3月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API
|
4月前
|
JavaScript
js实现省市区的三级联动
js实现省市区的三级联动
60 7
|
4月前
|
人工智能 JavaScript 前端开发
使用Node.js模拟执行JavaScript
使用Node.js模拟执行JavaScript
41 2
|
4月前
|
消息中间件 JavaScript 前端开发
用于全栈数据流的 JavaScript、Node.js 和 Apache Kafka
用于全栈数据流的 JavaScript、Node.js 和 Apache Kafka
58 1
|
4月前
|
移动开发 JavaScript 前端开发
【JavaScript】JS执行机制--同步与异步
【JavaScript】JS执行机制--同步与异步
36 1
|
4月前
|
JavaScript 前端开发
电话号码正则表达式 代码 javascript+html,JS正则表达式判断11位手机号码
电话号码正则表达式 代码 javascript+html,JS正则表达式判断11位手机号码
157 1