多级联动的select框
JS文件:
; (function($, w) {
var LinkSelect = function(config) {
var opt = {
doms: config.doms || [],
url: config.url || '',
type: config.type || 'get',
data: config.data || []
};
if (opt.doms.length < ) {
return console.log('必须两个或两个以上下拉框');
}
function initial() {
for (var i = ; i < opt.doms.length; i++) {
(function(idx) {
opt.doms[idx].on('change',
function () {
var val = $(this).val();
var temp = getDataByValue(idx);
var nextDom = opt.doms[idx + ];
if (nextDom && nextDom.length > ) {
setDomData(nextDom, temp);
}
});
})(i);
}
if (opt.data && opt.data.length > ) {
initialUi();
} else {
if (!opt.url || opt.url === '') {
return console.log('配置无效,必须指定url或data');
} else {
$.ajax({
url: opt.url,
type: opt.type,
success: function(response) {
opt.data = response;
initialUi();
}
});
}
}
}
function initialUi() {
var dom = opt.doms[];
setDomData(dom, opt.data);
}
function getDataByValue(idx) {
var source = opt.data;
for (var i = ; i <= idx; i++) {
(function(idx) {
var temp = source.find(function(item) {
return item.value.toString() === opt.doms[idx].val();
});
if (temp && temp.children) {
source = temp.children;
} else {
source = [];
}
})(i);
}
return source;
}
function resetDom(dom) {
dom.html('<option value="">请选择</option>');
}
function setDomData(dom, data) {
if (!data || data.length === ) {
resetDom(dom);
} else {
var html = '<option value="">请选择</option>';
$.each(data,
function(idx, item) {
html += '<option value="' + item.value + '">' + item.text + '</option>';
});
dom.html(html);
}
dom.trigger('change');
}
initial();
};
w.LinkSelect = LinkSelect;
})(jQuery, window);
页面结构
<div class="container">
<h2>Index</h2>
<hr />
<div class="form-box">
<div class="row">
<div class="label">年级</div>
<div class="control">
<select id="grade"></select>
</div>
</div>
<div class="row">
<div class="label">班级</div>
<div class="control">
<select id="clazz"></select>
</div>
</div>
<div class="row">
<div class="label">组</div>
<div class="control">
<select id="group"></select>
</div>
</div>
</div>
</div>
使用方法:
<script src="lib/myui/LinkSelect.js"></script>
<script>
var ls = new LinkSelect({
doms: [$('#grade'), $('#clazz'), $('#group')],
data: [
{
text: '苗班',
value: ,
children: [
{
text: '苗1班',
value: ,
children: [
{
text: '1组',
value: ,
children: []
}]
},
{
text: '苗2班',
value: ,
children: []
}]
},
{
text: '小班',
value: ,
children: [
{
text: '小1班',
value: ,
children: []
}]
},
{
text: '中班',
value: ,
children: [
{
text: '中1班',
value: ,
children: []
},
{
text: '中2班',
value: ,
children: []
}]
}]
})
</script>
多级联动的select框的更多相关文章
- JQuery Easyui/TopJUI 创建多级联动下拉框(纯HTML实现!!!)
JQuery Easyui/TopJUI 创建多级联动下拉框(纯HTML实现!!!) 效果展示: 代码如下: <form data-toggle="topjui-form"& ...
- ajax 多级联动 下拉框 Demo
写了ajax实现级联下拉框,考虑常用,并且级联个数随不同业务个数不同,于是就整理了一下,实现了 ajax + N级联动 下拉框的效果 效果图 HTML 代码 <h2> 省级联动</h ...
- bootstrap 多级联动下拉框
<!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- jQuery制作简洁的多级联动Select下拉框
今天我们要来分享一款很实用的jQuery插件,它是一个基于jQuery多级联动的省市地区Select下拉框,并且值得一提的是,这款联动下拉框是经过自定义美化过的,外观比浏览器自带的要漂亮许多.另外,这 ...
- vue 获取数据联动下拉框select ,并解决报Duplicate value found in v-for="...": "". Use track-by="$index" 错误
公司项目中遇到一个问题,联动下拉框,并且数据是使用vue-resource从后台获取的,格式不利于输出联动下拉框,联动下拉框是第一个下拉框输出一个数组里每一项json的一个text值,从而第二下拉框输 ...
- MVC实现多级联动
前言 多级联动(省级联动)的效果,网上现成的都有很多,各种JS实现,Jquery实现等等,今天我们要讲的是在MVC里面,如何更方便.更轻量的实现省级联动呢? 实现效果如下: 具体实现 如图所示,在HT ...
- 使用chosen插件实现多级联动和置位
使用chosen插件实现多级联动和置位 首先写好第一个select,加上onchage属性之后,写onchange方法. <select data-placeholder="选择省份. ...
- C/C++ Qt 数据库与ComBox多级联动
Qt中的SQL数据库组件可以与ComBox组件形成多级联动效果,在日常开发中多级联动效果应用非常广泛,例如当我们选择指定用户时,我们让其在另一个ComBox组件中列举出该用户所维护的主机列表,又或者当 ...
- PHP多级联动的学习(一)
我尝试在ThinkCMF中实现多级联动,首先我开始看了dede的联动类别管理前后台的代码以及他的数据库,经过非常多次的尝试,我渐渐有了一点想法,并给予实施. 首先写出前台的界面.如图. 然后在数据库中 ...
随机推荐
- Java中的String数据类型
本文主要是说明一些String数据类型的基本知识,有些杂乱,不过都是比较重要的东西,主要是参考了网上人的资料.原文网址:http://dev.yesky.com/91/2309091.shtml 主要 ...
- Nuget:目录
ylbtech-Nuget:目录 1.返回顶部 1. https://www.nuget.org 2. https://docs.microsoft.com/zh-cn/nuget/ 3. https ...
- 关于javaScript事件委托的那些事
今天是第一次写稿,还是有那么一丢丢小鸡冻...回归正题啦... 关于javaScript事件委托不得不说的那些事,为什么要使用事件委托? 我们可以这么说,假设老板要分配一项任务,首先要秘书叫A君来到办 ...
- 为JFileChooser设定扩展名过滤
--------------------siwuxie095 工程名:TestFileChooser 包名:com.siwuxie095.fil ...
- Flask13 面试要能吹 、安装虚拟机、虚拟机全局设置、导入虚拟机文件、虚拟机局部设置
1 web开发工作的三个能力 1.1 开发思想 易维护:开发成本远低于维护成本 可扩展:随着访问量的增加会自动使用多个数据库 高可用:程序就像小强一样,开发的系统能够经得住狂风暴雨的吹残(例如:一台主 ...
- Jmeter进行简单mysql数据库测试
1.环境准备: mysql: mysql-5.7.17.msi jdbc驱动: 自己百度一下即可 Jmeter: 3.2 2.打开Jmeter,创建测试计划, 点击浏览,添加jdbc驱动 3.添 ...
- Ubuntu 使用 heirloom-mail 调用外部邮箱 SMTP 服务器发送邮件
使用本地服务发邮件,经常被过滤掉而且占用资源,发送成功率不高.所以使用外部SMTP服务器发送邮件成为了需求. SMTP认证的目的是为了使用户避免受到垃圾邮件的侵扰,简单地说就是要求必须在提供了账户名和 ...
- p2661 信息传递(Tarjan模板)
传送门 题目 有 nnn 个同学(编号为 111 到 nnn )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 iii 的同学的信息传递对象是编号为 TiT_iTi ...
- 8.bwapp亲测xxe漏洞
这几天在学习XXE漏洞,这里用靶机bwapp来练习一下这个漏洞,重在学习 xxe漏洞主要针对webservice危险的引用的外部实体并且未对外部实体进行敏感字符的过滤, 从而可以造成命令执行,目录遍历 ...
- cookie 、Session 和自定义分页
cookie cookie的由来 大家都知道Http协议是无状态的. 无状态的意思 是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系, 他不会受前面的请求响应情况直接影响, ...