JS下拉选择框实现省市区(县)三级联动

来自网络:

https://www.sunzhongwei.com/js-provinces-three-level-linkage-selection-component?from=sidebar_new

效果图

 

实现

项目结构:

city.js

https://blog.csdn.net/qq_26416195/article/details/81114888

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>地址选择</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
<div>
    <fieldset>
        <form action="#">
            <label for="addr-show">您选择的是:
                <input type="text" value="" id="addr-show">
            </label>
            <br/>

            <!--省份选择-->
            <select id="prov" onchange="showCity(this)">
                <option>=请选择省份=</option>

            </select>

            <!--城市选择-->
            <select id="city" onchange="showCountry(this)">
                <option>=请选择城市=</option>
            </select>

            <!--县区选择-->
            <select id="country" onchange="selecCountry(this)">
                <option>=请选择县区=</option>
            </select>
            <button type="button" class="btn met1" onClick="showAddr()" id="button-show" >确定</button>
        </form>
    </fieldset>
</div>

<script src="city.js"></script>
<script src="method.js"></script>

</body>
</html>

method.js

/*根据id获取对象*/
function $(str) {
    return document.getElementById(str);
}

var addrShow = $('addr-show');
var btn = document.getElementsByClassName('met1')[0];
var prov = $('prov');
var city = $('city');
var country = $('country');


/*用于保存当前所选的省市区*/
var current = {
    prov: '',
    city: '',
    country: ''
};

/*自动加载省份列表*/
(function showProv() {
    btn.disabled = true;
    var len = provice.length;
    for (var i = 0; i < len; i++) {
        var provOpt = document.createElement('option');
        provOpt.innerText = provice[i]['name'];
        provOpt.value = i;
        prov.appendChild(provOpt);
    }
})();

/*根据所选的省份来显示城市列表*/
function showCity(obj) {
    var val = obj.options[obj.selectedIndex].value;
    if (val != current.prov) {
        current.prov = val;
        addrShow.value = '';
        btn.disabled = true;
    }
    //console.log(val);
    if (val != null) {
        city.length = 1;
        var cityLen = provice[val]["city"].length;
        for (var j = 0; j < cityLen; j++) {
            var cityOpt = document.createElement('option');
            cityOpt.innerText = provice[val]["city"][j].name;
            cityOpt.value = j;
            city.appendChild(cityOpt);
        }
    }
}

/*根据所选的城市来显示县区列表*/
function showCountry(obj) {
    var val = obj.options[obj.selectedIndex].value;
    current.city = val;
    if (val != null) {
        country.length = 1; //清空之前的内容只留第一个默认选项
        var countryLen = provice[current.prov]["city"][val].districtAndCounty.length;
        if (countryLen == 0) {
            addrShow.value = provice[current.prov].name + '-' + provice[current.prov]["city"][current.city].name;
            return;
        }
        for (var n = 0; n < countryLen; n++) {
            var countryOpt = document.createElement('option');
            countryOpt.innerText = provice[current.prov]["city"][val].districtAndCounty[n];
            countryOpt.value = n;
            country.appendChild(countryOpt);
        }
    }
}

/*选择县区之后的处理函数*/
function selecCountry(obj) {
    current.country = obj.options[obj.selectedIndex].value;
    if ((current.city != null) && (current.country != null)) {
        btn.disabled = false;
    }
}

/*点击确定按钮显示用户所选的地址*/
function showAddr() {
    addrShow.value = provice[current.prov].name + '-' + provice[current.prov]["city"][current.city].name + '-' + provice[current.prov]["city"][current.city].districtAndCounty[current.country];
}

style.css

/*全局样式*/
* {
    margin: 0;
    padding: 0;
}

fieldset {
    width: 500px;
    padding: 20px;
    margin: 30px;
    border: 1px solid #ccc;
}

legend{
    font-size: 18px;
    font-weight: bold;
}

#addr-show, #addr-show02,#addr-show03{
    width: 200px;
    height: 25px;
    margin-bottom: 10px;
}

.btn {
    width: 80px;
    height: 30px;
    border-radius: 4px;
    border: 1px solid #ccc;
    outline: none;
    background-color: #aaa;
    margin: 0 20px;
}

.btn:disabled{
    background-color:#ccc;
}


select {
    width: 120px;
    height: 30px;
}

 

  • 26
    点赞
  • 199
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
好的,那么这里提供一种基于Vue实现省市区三级联动的方法。 首先,我们需要准备好三个下拉,分别是省、市、区,同时需要一个存放省市区数据的数组。我们可以在Vue实例中定义一个data属性来存储这些数据。 然后,我们需要在页面加载时,通过Ajax请求获取省市区数据,并将数据存储到Vue实例的data属性中。 最后,我们需要监听省、市的选择事件,根据选择的省、市来筛选出对应的区数据,并将其展示在区的下拉中。 下面是一个简单的示例代码: ``` <template> <div> <select v-model="selectedProvince" @change="provinceChange"> <option v-for="province in provinces" :value="province.id">{{province.name}}</option> </select> <select v-model="selectedCity" @change="cityChange"> <option v-for="city in cities" :value="city.id">{{city.name}}</option> </select> <select v-model="selectedDistrict"> <option v-for="district in districts" :value="district.id">{{district.name}}</option> </select> </div> </template> <script> export default { data() { return { provinces: [], // 省份数据 cities: [], // 城市数据 districts: [], // 区域数据 selectedProvince: '', // 当前选中的省份id selectedCity: '', // 当前选中的城市id selectedDistrict: '', // 当前选中的区域id } }, mounted() { // 页面加载时请求省市区数据 this.loadProvinces(); }, methods: { // 加载省份数据 loadProvinces() { // 发送Ajax请求获取省份数据 axios.get('/api/provinces').then(response => { this.provinces = response.data; }).catch(error => { console.log(error); }); }, // 加载城市数据 loadCities(provinceId) { // 发送Ajax请求获取城市数据 axios.get('/api/cities?provinceId=' + provinceId).then(response => { this.cities = response.data; }).catch(error => { console.log(error); }); }, // 加载区域数据 loadDistricts(cityId) { // 发送Ajax请求获取区域数据 axios.get('/api/districts?cityId=' + cityId).then(response => { this.districts = response.data; }).catch(error => { console.log(error); }); }, // 省份选择事件 provinceChange() { // 重置城市和区域的选择 this.selectedCity = ''; this.selectedDistrict = ''; // 加载选中省份的城市数据 this.loadCities(this.selectedProvince); }, // 城市选择事件 cityChange() { // 重置区域的选择 this.selectedDistrict = ''; // 加载选中城市的区域数据 this.loadDistricts(this.selectedCity); } } } </script> ``` 在这个示例中,我们使用了axios库来发送Ajax请求获取省市区数据。对于省份选择事件和城市选择事件,我们都需要重置下一级选择的值,并根据当前选择的省、市来加载对应的城市、区域数据。 当然,具体的数据结构和请求方式需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值