select2插件使用小记2 - 多选联动 - 笔记

时间:2022-12-19 18:17:03

  这是select2插件使用的第二篇,可参考第一篇 select2插件使用小记。上一篇主要是关于基本的使用,这篇主要是关于多选,及联动的。侧重点不同。

效果图如下:

  select2插件使用小记2 - 多选联动 - 笔记

  遵从W3C标准:结构、样式、行为。以下分别是html、css、js代码。

  html主要代码如下:

  多选:需要设值select元素 - name="name[]" , 及 multiple="multiple"。

<div class="form-wrap">
<div class="field-value-list">
<p class="field-value-list-left"><span class="field-value"><i class="asterisk">*</i>行业选择:</span></p>
<div class="field-value-list-right">
<div class="field-value">
<p>
<select id="in_f" class="sel2-mul-not-null industry" name="in_f[]" data-next="in_s" multiple="multiple"> </select>
<span id="in_f_desc" class="check-result info-content-tip form-item-true">&nbsp;</span>
</p>
<p style="margin-top: 10px;">
<select id="in_s" class="sel2-mul-not-null industry" name="in_s[]" data-next="in_t" multiple="multiple"> </select>
<span id="in_s_desc" class="check-result info-content-tip form-item-true">&nbsp;</span>
</p>
<p style="margin-top: 10px;">
<select id="in_t" class="industry" name="in_t[]" multiple="multiple"> </select>
<span>非必填</span>
<span id="in_t_desc" class="check-result info-content-tip form-item-true">&nbsp;</span>
</p>
</div>
</div>
</div>
</div>

  渲染模板内容如下:

  备注:使用了jsrender渲染模板,需要引入jsrender.js, 可不使用,使用其他方式。主要功能是循环渲染select的option的内容,减少字符串的拼接。

    <!-- 选择下拉框选项 -->
<script type="text/x-jsrender" id="tp_sel">
{{for data}}
<option value="{{:id}}" title="{{:text}} [{{:id}}]">{{:text}}</option>
{{/for}}
</script>

  css主要样式如下:

       /* select2样式重设 */
.select2-container--default .select2-selection--multiple {
min-height: 28px;
background: #f5f5f5;
border-color: #bbb;
border-radius:;
line-height: 22px;
}
.select2-container--default.select2-container--focus .select2-selection--multiple{
overflow: auto;
max-height: 120px;
background: #fff;
border-color: #bbb;
}
.select2-container--default .select2-search--inline .select2-search__field {
margin-top:;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
overflow: hidden;
margin-top: 4px;
max-width: 100px;
height: 20px;
line-height: 20px;
text-overflow: ellipsis;
} .form-wrap {
margin: 70px;
}
.field-value-list{
margin-bottom: 10px;
}
.field-value-list-left{
float: left;
width: 96px;
height: 30px;
line-height: 30px;
}
.field-value-list-left .field-value{
display: block;
font-size: 14px;
text-align: right;
color: #333;
}
.field-value-list-right{
margin-left: 86px;
padding-left: 25px;
min-height: 30px;
line-height: 30px;
text-align: left;
}
.field-value-list-right .field-value{
display: inline-block;
margin-right: 10px;
min-height: 30px;
line-height: 30px;
vertical-align: top;
font-size: 12px;
}
.field-value-list-right .field-value select {
padding-left: 4px;
padding-right:4px;
width: 320px;
max-width: 320px;
height: 28px;
background-color: #f5f5f5;
border:1px solid #bbbbbb;
line-height: 20px;
font-size: 12px;
color:#333333;
vertical-align: top;
}
.field-value-list-right .field-value select:focus{
background-color: #fff;
}
.field-value-list-right span.form-item-false{
color:#e40000;
}
.field-value-list-right span.form-item-true{
display: none;
}
.field-value-list-left span i{
display: inline-block;
height: 30px;
width: 20px;
text-align: center;
line-height: 30px;
font-style: normal;
font-size: 14px;
color: #ff0000;
}
.field-value-list-left span i.asterisk{
width: 10px;
font-size: 12px;
line-height: 30px;
}

  js主要代码如下:

    <script src="js/jquery.min.js"></script>
<script src="select2/select2.full.min.js"></script>
<!-- 模板渲染引擎 -->
<script src="js/jsrender.js"></script>
<script>
var map = {
"in_f": [
{
"id": 1,
"text": "网络服务",
"children": [
{
"id": 2,
"text": "网络服务-资讯",
"children": [
{
"id": 3,
"text": "资讯-综合门户"
},
{
"id": 4,
"text": "资讯-汽车"
},
{
"id": 5,
"text": "资讯-房产"
},
{
"id": 6,
"text": "资讯-军事"
}
]
},
{
"id": 11,
"text": "网络服务-生活服务",
"children": [ ]
},
{
"id": 13,
"text": "网络服务-社交",
"children": [
{
"id": 14,
"text": "社交-休闲"
},
{
"id": 15,
"text": "社交-婚恋"
},
{
"id": 16,
"text": "社交-商务"
}
]
}
]
},
{
"id": 35,
"text": "游戏",
"children": [
{
"id": 36,
"text": "游戏-客户端",
"children": [ ]
},
{
"id": 37,
"text": "游戏-网页",
"children": [ ]
}
]
},
{
"id": 43,
"text": "零售",
"children": [
{
"id": 47,
"text": "零售-垂直B2C",
"children": [
{
"id": 48,
"text": "垂直B2C-数码家电"
},
{
"id": 49,
"text": "垂直B2C-服装鞋帽"
},
{
"id": 50,
"text": "垂直B2C-食品饮料"
},
{
"id": 51,
"text": "垂直B2C-个护化妆"
}
]
},
{
"id": 56,
"text": "零售-票务平台",
"children": [ ]
}
]
}
],
"in_s": [ ],
"in_t": [ ]
}; $(function () {
/* 多选 联动 */
var selectMod = {
initSelect: function ($target) { // 初始化
$target.select2({
placeholder: '请选择(可多选)',
language: {
noResults: function() {
return "暂无数据"
}
}
});
},
editInitSelected: function ($target, val) {
$target.val(val).trigger('change');
},
renderNext: function () { // 下拉多选联动
var $this = $(this),
cur = $this.attr('id'),
curVal = $('#'+cur).val(),
next = $this.data('next'),
$next = $('#'+next),
tp = $('#tp_sel'),
curArr = map[cur] || [];
if (curVal) {
if (next && $next.length && curArr.length) {
var arr = curArr.filter(function (obj) {
if (curVal.indexOf(obj.id+'') != -1) {
return obj;
}
}).map(function (obj) {
if (obj && obj.children && obj.children.length) {
return obj.children;
}
});
map[next] = [].concat.apply([], arr); // 二维数组转换为一维数组
$next.html(tp.render({data:map[next]})).change();
}
} else {
if (next && $next.length) {
$next.html(tp.render({data:map[next]})).change();
}
}
}
}; var industryMod = {
event: function () {
$('body').on('change', '.industry', selectMod.renderNext);
},
init: function () {
this.event();
$('#in_f').html($('#tp_sel').render({data:map.in_f}));
selectMod.initSelect($('#in_f, #in_s, #in_t'));
},
// 假如有回填信息,调用该方法即可
editInit: function () {
// 回填信息,按照联动顺序,依次赋值
var editInfo = {
in_f: ['1'],
in_s: ['2'],
in_t: ['3', '4']
};
selectMod.editInitSelected($('#in_f'), editInfo.in_f);
selectMod.editInitSelected($('#in_s'), editInfo.in_s);
selectMod.editInitSelected($('#in_t'), editInfo.in_t);
}
};
industryMod.init();
})
</script>

  

  

select2插件使用小记2 - 多选联动 - 笔记的更多相关文章

  1. 在select2插件中append下拉选,点击没反应的解决

    今天前端大佬帮我解决了一个棘手的问题:克隆了已有系统的网页,尝试把复制下来的html改造成jsp.基本功能正常,然而点击新增按钮,出来的行无法点击下拉选,控制台也没报错. 项目用的是jeesite2. ...

  2. select2插件使用小记

    插件官网:https://select2.github.io/examples.html 页面引入: // 页面顶部 <link rel="stylesheet" type= ...

  3. jQuery的下拉选select2插件用法

    1转自:https://www.jb51.net/article/95561.htm 用了这么久的Select2插件,也该写篇文章总结总结.当初感觉Select2不是特别好用,但又找不到比它更好的下拉 ...

  4. 01:jQuery的下拉选select2插件用法

    1.1 select2插件基本使用 1.下载select2插件 1. 下载地址:https://github.com/select2/select2 2.官网地址:https://select2.or ...

  5. 基于Metronic的Bootstrap开发框架经验总结(3)--下拉列表Select2插件的使用

    在上篇<基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用>介绍了数据的分页处理,使用了Bootstrap Paginator插件,另外 ...

  6. Metronic&lowbar;下拉列表Select2插件的使用

    这个插件是基于Select的扩展插件,能够提供更加丰富的功能和用户体验,它的github官网地址为:https://select2.github.io/,具体的使用案例,可以参考地址:https:// ...

  7. (转)基于Metronic的Bootstrap开发框架经验总结(3)--下拉列表Select2插件的使用

    http://www.cnblogs.com/wuhuacong/p/4761637.html 在上篇<基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JST ...

  8. select2插件

    引入select2插件<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min. ...

  9. select2插件用法

    1.修改默认查询方法,使其可以根据value查询 this.element.select2({ allowClear: true, matcher: function (term, text, ele ...

随机推荐

  1. 【SharePoint学习笔记】第3章 SharePoint列表新特性以及数据访问

    第3章 SharePoint列表新特性以及数据访问   使用CAML查询语言     CAML:协作应用程序标记语言 Collaboration Application Markup Language ...

  2. VR教育旋风来袭,各大公司争先进军虚拟现实教育

    根据国内一份最新的报告显示,VR技术对于提高学生的学习成绩有非常积极的作用,并且通过测试结果来看,无论是对知识的认知还是成绩测试,VR都起到了非常有效的效果. 2016成为VR元年,虚拟现实技术除了在 ...

  3. JDBC的几种驱动

    不同的数据库的驱动是不同的 其中:Access驱动串---------sun.jdbc.odbc.JdbcOdbcDriver    MySQL驱动串---------com.mysql.jdbc.D ...

  4. 2014 ACM&sol;ICPC Asia Regional Xi&&num;39&semi;an Online(HDU 5007 ~ HDU 5017)

    题目链接 A题:(字符串查找,水题) 题意 :输入字符串,如果字符串中包含“ Apple”, “iPhone”, “iPod”, “iPad” 就输出 “MAI MAI MAI!”,如果出现 “Son ...

  5. 从投影的角度理解pca:向量,投影,基,内积,坐标,维数,分散程度,方差,协方差矩阵,对角化,特征值分解,主成分分析PCA

    参考:http://blog.csdn.net/songzitea/article/details/18219237

  6. Oracle日常维护脚本

    1.正常停库流程     ps -ef|grep LOCAL=NO|cut -c 9-15|xargs kill -9      shutdown immediate; 2.备份数据库     bac ...

  7. BMS 项目过程中遇到的问题

    环境搭建的问题 Git的ssh私人密钥问题, 路劲不正确的话使用ssh方式连接github进行远程push或clone会出现需要输入密码而怎么输入都不正确的情况,这个时候使用下面的办法: http方面 ...

  8. 从1500万用户巅峰跌落的app,血泪回顾图片社交那些坑

    饭桌君说 第八届小饭桌创业课堂来了一位特殊的分享嘉宾,他曾经参与了一款当时极具风头的图片社交app的创始团队,靠谱团队,用户量急速上升到1500万,公司获得A轮……一切看上去都那么美好. 可是,由于各 ...

  9. SLAM中的优化理论(一)—— 线性最小二乘

    最近想写一篇系列博客比较系统的解释一下 SLAM 中运用到的优化理论相关内容,包括线性最小二乘.非线性最小二乘.最小二乘工具的使用.最大似然与最小二 乘的关系以及矩阵的稀疏性等内容.一方面是督促自己对 ...

  10. CentOS openssh升级到openssh可用

    1. https://blog.csdn.net/moonpure/article/details/54575401 2. http://www.it165.net/admin/html/201303 ...