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 ...
随机推荐
- AngularJs(v1)相关知识和经验的碎片化记录
1.利用angular指令监听ng-repeat渲染完成后执行脚本 http://www.cnblogs.com/wangmeijian/p/5141266.html 2.$http的POST请求中请 ...
- IE6,7,8在boostrap中兼容h5和css3
IE6.7.8版本(IE9以下版本)浏览器兼容html5新增的标签,引入下面代码文件即可: <script src="https://oss.maxcdn.com/libs/html5 ...
- Perl 学习笔记-高级控制结构
1.unless控制结构 类似于独立的else语句; 要么条件为真, 要么执行语句块内的代码; unless(<condition>){code...;} 等价于 if(<con ...
- git hook 自动部署
1. 当前虚拟站点根目录的 .git/ 权限 2. 当前项目裸仓库创建 hooks/post-receive 文件,并给予x 的权限 3. 复制如下内容 #!/bin/sh unset $(git r ...
- Call to undefined function Think\C()
Fatal error: Call to undefined function Think\C() in /alidata/www/default/2017/newyear/simplewind/Co ...
- ScreenCapturePro2 for Joomla_3.4.7-tinymce4x
1.1. 与Joomla_3.4.7-tinymce4x整合 示例下载:Joomla_3.4.7, 1.1.1. 添加screencapture文件夹 1.1.2. 2.添加插件文件夹 路径: ...
- sampling method
sampling method 背景 在贝叶斯框架下,利用后验分布对参数进行估计,也即 其中 (1)是参数的先验分布. (2)是似然分布,数据集的生成联合概率 (3)是参数的后验分布. 通常分布很复杂 ...
- jenkinsapi操作Jenkins,提示:No valid crumb was included in the request
# coding:utf-8 from jenkinsapi.jenkins import Jenkins # 实例化Jenkins对象,传入地址+账号+密码 j = Jenkins("ht ...
- C#应用程序所有已经打开的窗体的集合
获取所有打开的窗体的集合 Application.OpenForms 获取其中的某个窗体 Application.OpenForms["窗体名"]
- C# try catch finally
抛出异常开销非常大(相对而言),所以不要过多的在程序中使用它们 既然finally一定是要执行的,即使try块中有return