es6 简单封装一个 省市县三级下拉框
废话不多说,直接上效果图和代码:

1,index.js
function $(el){
return document.getElementById(el)
}
let render = Symbol('render')
let event = Symbol('event')
class Select {
constructor (el) {
console.log(el)
if (!el) {
throw '请填写el配置'
} else {
this[render](el)
this[event]()
}
}
[render](el) {
let tpl = `<div class="select-box disIn font14">
<div class="province-box disIn pr">
<input type="text" name="province" class="province-input" id="province-input" placeholder="请选择省" readonly>
<ul class="province-list" id="province-list"></ul>
</div>
<div class="city-box disIn pr">
<input type="text" name="city" class="city-input" id="city-input" placeholder="请选择市" readonly>
<ul class="city-list" id="city-list"></ul>
</div>
<div class="area-box disIn pr">
<input type="text" name="area" class="area-input" id="area-input" placeholder="请选择县" readonly>
<ul class="area-list" id="area-list"></ul>
</div>
</div>`;
el.innerHTML = tpl;
}
async [event]() {
let datas = await fetchJson('/region') // 这里用了mock 模拟了一个get请求,获取了一个全国省市县的json数据。
let $provinceInput = $('province-input')
let $provinceList = $('province-list')
let $cityInput = $('city-input')
let $cityList = $('city-list')
let $areaInput = $('area-input')
let $areaList = $('area-list')
let provinceData = '';
let cityData = '';
let areaData = '';
let choicedData = null;
$provinceInput.onclick = function () {
provinceData = '';
for (let province of datas.data) {
provinceData += `<li data-code="${province.code}">${province.name}</li>`
}
$provinceList.innerHTML = provinceData
$provinceList.style.display = 'block'
$provinceList.onclick = function (e) {
$provinceInput.value = e.target.innerHTML
$provinceInput.setAttribute('data-code', e.target.getAttribute('data-code'))
$cityInput.value = $areaInput.value = '';
this.style.display = 'none';
}
}
$cityInput.onclick = function () {
cityData = '';
let provinceCode = $provinceInput.getAttribute('data-code')
if (!provinceCode) {
$provinceInput.click()
return
}
choicedData = datas.data.filter(item => {
return item.code === provinceCode
})
for (let item of choicedData[].cityList) {
cityData += `<li data-code="${item.code}">${item.name}</li>`
}
$cityList.innerHTML = cityData
$cityList.style.display = 'block';
$cityList.onclick = function (e) {
$cityInput.value = e.target.innerHTML
$cityInput.setAttribute('data-code', e.target.getAttribute('data-code'))
this.style.display = 'none'
}
}
$areaInput.onclick = function () {
areaData = '';
let cityCode = $cityInput.getAttribute('data-code');
if (!cityCode) {
$cityInput.click()
return
}
let cityChoiced = choicedData[].cityList.filter(item => {
return item.code === cityCode
})
for (let item of cityChoiced[].areaList) {
areaData += `<li data-code="${item.code}">${item.name}</li>`
}
$areaList.innerHTML = areaData;
$areaList.style.display = 'block'
$areaList.onclick = function (e) {
$areaInput.value = e.target.innerHTML
$areaInput.setAttribute('data-code', e.target.getAttribute('data-code'))
this.style.display = 'none'
}
}
}
}
es6 简单封装一个 省市县三级下拉框的更多相关文章
- EXCEL设置三级下拉框
EXCEL设置三级下拉框 1.添加下拉框数据源 公式--->指定 公式--->名称管理器 2.设置第一级下拉框的值 3.第一级下拉框选出一个值 4.设置第二级下拉框(INDIRECT($A ...
- 用Ajax遍历三级下拉框
用Ajax遍历三级下拉框 //通过一级分类的id查二级分类(记得在前端网页按钮绑定点击事件) function getSecondCategory(oneCategoryId){ alert(&quo ...
- maven一模块字段调用另一个模块数据生成下拉框
店铺运营数据录入表实现的下拉框实现 从片区管理中提取分区数据,在招商管理(MIS)模块中获取并以下拉框的形式展现 ctrl类: 1.首先在ctrl类注入需提取另一模块字段的serviceclient接 ...
- jquery+html三级联动下拉框
jquery+html三级联动下拉框及详情页面加载时的select初始化问题 html写的三个下拉框,如下: <select name="ddlQYWZYJ" id=&q ...
- jquery+html三级联动下拉框及详情页面加载时的select初始化问题
html写的三个下拉框,如下: <select name="ddlQYWZYJ" id="ddl_QYWZYJ" class="fieldsel ...
- jquery+ligerform三级联动下拉框
如下为ligerform里的三级联动下拉框: var formData=[ {display:,width:,space:,type:"select",group:"区域 ...
- css三级下拉的导航栏
#menu{ height: 65px; width:100%; background-color: rgba(0, 0, 0, 0.5);}#menu ul{ list-style: none;}# ...
- ComboBox可搜索下拉框的使用注意事项,简单记录以及我遇到的一些奇怪的bug
前几天做一个react的项目的时候需要用一个可搜索的下拉框ComboBox,上代码: <ComboBox // className={comboxClassName} items={storeA ...
- MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框
1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...
随机推荐
- Python爬虫实战七之计算大学本学期绩点
大家好,本次为大家带来的项目是计算大学本学期绩点.首先说明的是,博主来自山东大学,有属于个人的学生成绩管理系统,需要学号密码才可以登录,不过可能广大读者没有这个学号密码,不能实际进行操作,所以最主要的 ...
- ui界面使用 DialogMonitorOPS 问题
-- 是类主要是实现对界面上元素的处理.实现效果的处理 struct gt_cl_hp_uiName ( fn help = ( gt_10000_help = " 类主要是实现对界面上元素 ...
- 白盒测试实践项目(day4)
华中科技大学教材订购系统 代码评审会议纪要 与会人员: 胡俊辉.杨瑞丰.汪鸿.张颖.李建文 评审标准: 此次代码评审会议,我们小组选用了阿里巴巴Java开发手册对代码进行评审. 会议过程: 1:周末下 ...
- windows server2012如何开启mysql远程登录
开发的首要任务就是要搭建起自己的服务器,下面主要是我这搭建记录下 我的各种环境 服务器为Windows server2012 安装的MySQL数据的版本是5.6.10 ,64位.当然了版本对于安装没 ...
- Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析
Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析 一:Tolookup 1. 从方法的注解上可以看到,ToLookup也是一个k,v的形式,那么问题来了,它 ...
- Android-Observer(内容观察者)
内容提供者应用暴露的数据,是被多个其他应用访问(insert,update,delete,query),但如果L应用要查询(内容提供者应用暴露的数据),难道要开启子线程一直循环去查询 ? 答:开启子线 ...
- ubuntu 编译安装 mod_wsgi
在编译过程中遇到一些问题,记录下来方便别人使用. step1: 下载.windows下面会有编译好的包,Ubuntu没有需要自己编译. 地址: https://github.com/GrahamDum ...
- python之文件操作总结
目录 文件:数据的抽象和集合 文件的打开关闭 文件内容的读取 文件的全文本操作 文件的逐行操作 数据文件的写入 使用json模块 文件:数据的抽象和集合 文件是存储在辅助存储器上的数据序列 文件是数据 ...
- PostgreSQL按年月日分组
Select EXTRACT(year from cast(joindate as timestamp)) as Year, EXTRACT(month from cast(joindate as t ...
- docker 命令大全
http://www.runoob.com/docker/docker-command-manual.html