学习记录342@JS练习之选择国家下拉列表,城市下拉列表添加对应的城市

需求:使用JS编程实现加载页面后自动添加国家下拉列表,选中某个国家时,城市下拉列表自动添加对应的城市

原界面

注意原始界面没有具体国家和具体城市
在这里插入图片描述

预期效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册界面验证</title>
    <script type="text/javascript">
        //动态注册
        //window.onload保证文档加载完成
        window.onload=function () {
            // 加载后自动添加国家
            let country = document.getElementById("country");
            var arr_country = ["中国", "美国", "俄罗斯"];
            for (var i = 0; i < arr_country.length; i++) {
                let element = document.createElement("option");
                let text = document.createTextNode(arr_country[i]);
                element.appendChild(text);
                country.appendChild(element);
            }

            //创建城市map
            let map = new Map();
            map.set("中国",["成都", "北京", "上海"])
            map.set("美国",["华盛顿","洛杉矶","休斯顿"])
            map.set("俄罗斯",["莫斯科","圣彼得堡","新西伯利亚"])
            //获取国家数组
            let countrys = country.getElementsByTagName("option");
            //获取城市标签
            let city=document.getElementById("city");
            //国家标签改变时,选中哪一个国家,就在城市标签显示对应的城市
            country.onchange=function () {
                //先清空城市(处了"-城市-"外)
                // 这里一定要倒叙清空,因为删除一个城市对应的citys.length就会减一

                /*
                如果这样顺序删除就会出错,比如先删除索引为1的城市,然后i=2,
                但是此时后面的元素往前移动了,索引为1处还是有元素,但是无法删除,因为要删除索引为2的元素了
                这样删除元素就是不完整的,因此必须倒叙删除,从最后一个开始删除
                for (var i=1;i<citys.length;i++){
                    city.removeChild(citys[i]);
                }*/
                let citys = city.getElementsByTagName("option");
                for (var i=citys.length-1;i>0;i--){
                    city.removeChild(citys[i]);
                }
                //选中哪一个国家就对象添加城市
                for (var i=0;i<countrys.length;i++){
                    if (countrys[i].selected){
                        let arr_city = map.get(countrys[i].innerText);
                        for (var i=0;i<arr_city.length;i++){
                            let element = document.createElement("option");
                            let text = document.createTextNode(arr_city[i]);
                            element.appendChild(text);
                            city.appendChild(element);
                        }
                    }
                }
            }
        }
    </script>
</head>
<body>
    <select id="country">
        <option>-国家-</option>
    </select>

    <select id="city">
        <option>-城市-</option>
    </select>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Next.js 是一个流行的 JavaScript 框架,用于构建服务器渲染和客户端渲染的现代 web 应用程序。在 Next.js 中,实现国家、省、市三级联动的下列表通常涉及到前端组件的管理和数据绑定。这种下列表通常依赖于动态加载数据,比如从 API 获取或者通过静态数据预先定义好。 实现步骤大致如下: 1. **数据准备**: - 创建一个包含国家、省份和城市的三级数据结构,可能是一个数组嵌套数组的形式。 - 数据可以从服务器获取(例如使用 `fetch` 或 `axios`),也可以是预定义的 JSON 文件。 2. **组件设计**: - 使用 Next.js 的 `getStaticProps` 或 `getServerSideProps` 函数来获取静态数据,或者在组件内部动态请求数据。 - 设计一个 `Dropdown` 或者 `Select` 组件,它可以是一个自定义的组件,也可以使用第三方库如 `downshift` 或 `react-select`。 3. **状态管理**: - 使用 React 的 state 或者外部的状态管理库(如 Redux, MobX)来存储当前选中的层级。 4. **联动效果**: - 当用户选择一级(国家或省份)时,更新组件状态,然后重新渲染下框,只显示对应层级的选项。 - 可能还需要一个事件处理器来监听下框的变化,并触发数据更新。 5. **UI交互**: - 下列表可以使用 `onChange` 或者 `onSelect` 事件来捕获用户的选择,并相应地更新状态。 相关问题: 1. 如何在 Next.js 中处理异步数据获取? 2. 你能推荐一个在 Next.js 中使用的状态管理库吗? 3. 有没有现成的 React 组件库可以快速实现这种三级联动效果?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值