浅谈select2的使用
前言
select2相比较以往的select下拉框比起来,确实非常方便,它提供了一个可自定义的选择框,支持搜索,标记,远程数据集,无限滚动以及许多其他高度使用的选项。
select2的安装详情请看官方文档介绍的配置方式:https://select2.org/getting-started/installation
支持的类型
传统的 <select> 框中包含任意数量的<option>元素。其中每个都在下拉菜单中呈现为一个选项。Select2在其上初始化时保留此行为<select>包含的元素 <option> 元素,将它们转换为内部JSON表示:
{"id": "value attribute" || "option text","text": "label attribute" || "option text","element": HTMLOptionElement
}
关于分层
每个HTML规范只允许一个级别的嵌套。如果你<optgroup>
在又建立一个 <optgroup>
,Select2将无法检测到额外的嵌套级别,因此可能会触发错误。
此外, <optgroup>
元素不能被选择。这是HTML规范的限制,并不是Select2可以克服的限制。
如果您希望创建可选选项的真实层次结构,请使用 <option>
而不是 <optgroup>
并使用CSS更改样式。请注意,这种方法可能被认为是“不太容易访问”,因为它依赖于CSS样式,而不是语义<optgroup>
,以产生效果。
Select2数据格式
Select2可以从数组或远程数据源(AJAX)以编程方式提供的数据作为下拉选项。为了实现这一目标,Select2需要一种非常具体的数据格式。此格式由一个JSON对象组成,该对象包含由键控的对象数组result键。
{ "results": [{"id": 1,"text": "Option 1"},{"id": 2,"text": "Option 2","selected": true},{"id": 3,"text": "Option 3","disabled": true}],"pagination": {"more": true }
}
注:
- 如果您想使用“无限滚动”功能, //响应对象还可能包含分页数据。需要指定pagination键。
- 提供
selected
和disabled
此数据结构中的选项的属性 默认为不选中,true为选中
将数据转换为所需的格式
由于一般select数据可能会来源与后台,但Select2要求该id,text
属性用于唯一标识结果列表中显示的选项。如果使用id
(类似pk
)以外的属性来唯一标识选项,则需要将旧属性映射到id,text
将其传递给Select2之前。如果您无法在服务器上执行此操作,或者您处于无法更改API的情况,则可以在将其传递给Select2之前在JavaScript中执行此操作:
var data = $.map(yourArrayData, function (obj) {obj.id = obj.id || obj.pk; // replace pk with your identifierobj.text = obj.text || obj.name; // replace name with the property used for the textreturn obj;
});
注:不允许使用空格id
或id
值0
分组数据
{"results": [{ "text": "Group 1", "children" : [{"id": 1,"text": "Option 1.1"},{"id": 2,"text": "Option 1.2"}]},{ "text": "Group 2", "children" : [{"id": 3,"text": "Option 2.1"},{"id": 4,"text": "Option 2.2"}]}],"pagination": {"more": true}
}
注:在创建嵌套选项时,仅支持单级嵌套。不保证在所有浏览器和设备上正确显示任何其他嵌套级别。
也可以加载数组数据
var data = [{id: 0,text: 'enhancement'},{id: 1,text: 'bug'},{id: 2,text: 'duplicate'},{id: 3,text: 'invalid'},{id: 4,text: 'wontfix'}
];$(".js-example-data-array").select2({data: data
})
$(".js-example-data-array-selected").select2({data: data
})
选择后强制下拉列表保持打开状态
$('#mySelect2').select2({closeOnSelect: false
});
下拉列表
$('#mySelect2').select2({dropdownParent: $('#myModal')
});
默认情况下,Select2会将下拉列表附加到正文的末尾,并将其绝对定位到选择容器的上方或下方。
如果容器下方没有足够的空间,Select2将显示容器上方的下拉列表,但上面有足够的空间。
可清除的全部已选择的option
$('select').select2({placeholder: 'This is my placeholder',allowClear: true
});
设置true
为时,如果选择了值,则会在选择框中显示清除按钮(“x”图标)。单击清除按钮将清除所选值,有效地将选择框重置回其占位符值。
自动标记到标签中
$(".js-example-tokenizer").select2({tags: true,tokenSeparators: [',', ' ']
})
Select2支持在用户键入搜索字段时自动添加选项的功能。尝试在下面的搜索字段中输入并输入空格或逗号。
单选选择占位符(无非就是默认值)
<select class="js-example-placeholder-single js-states form-control"><option></option>
</select>
默认尝试选择第一个选项。如果您的第一个选项非空,浏览器将显示此选项而不是占位符。
多选占位符
$('select').select2({placeholder: {id: '-1', // the value of the optiontext: 'Select an option'}
});
事件列表
当用户在select2上执行不同操作时,select2会触发不同的事件,用户能够监听这些事件,并且添加相应的处理。
用户也可以通过.trigger来手动触发这些事件。
事件 | 描述 |
---|---|
change
|
选择或删除选项时触发。 |
change.select2
|
Scoped版本 change 。请参阅下文了解更多详情。
|
select2:closing
|
在下拉列表关闭之前触发。可以防止此事件。 |
select2:close
|
每当下拉菜单关闭时触发。 select2:closing 在此之前被解雇并且可以被阻止。
|
select2:opening
|
在下拉列表打开之前触发。可以防止此事件。 |
select2:open
|
每次下拉打开时触发。 select2:opening 在此之前被解雇并且可以被阻止。
|
select2:selecting
|
在选择结果之前触发。可以防止此事件。 |
select2:select
|
选择结果时触发。 select2:selecting 在此之前被解雇并且可以被阻止。
|
select2:unselecting
|
在删除选择之前触发。可以防止此事件。 |
select2:unselect
|
删除选择时触发。 select2:unselecting 在此之前被解雇并且可以被阻止。
|
select2:clearing
|
在清除所有选择之前触发。可以防止此事件。 |
select2:clear
|
清除所有选择时触发。 select2:clearing 在此之前被解雇并且可以被阻止。
|
获取选中值
方法1:
$('#mySelect2').select2('data');
返回一个js对象数组,包括选中项的所有properties/values。
方法2:
$('#mySelect2').find(':selected');
浅谈select2的使用相关推荐
- 浅谈select2使用
select2有很多的属性.事件,列举一些常用的栗子 引入select2插件后,最简单的使用方式,不带ajax请求 $("#demo").select2({placeholder: ...
- 浅谈MySQL存储引擎-InnoDBMyISAM
浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...
- 【大话设计模式】——浅谈设计模式基础
初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...
- 学校计算机机房好处,浅谈学校计算机机房维护
浅谈学校计算机机房维护 现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...
- java 中的单元测试_浅谈Java 中的单元测试
单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...
- mybatis与php,浅谈mybatis中的#和$的区别
浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...
- 浅谈GCC预编译头技术
浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...
- 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)
震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...
- 浅谈几种区块链网络攻击以及防御方案之其它网络攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...
- 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...
最新文章
- php$SQL时间函数,PHP模拟SQL Server的两个日期处理函数-PHP教程,PHP应用
- 怀念 儿时课本贴图,你还记得课文名吗
- (chap6 Http首部) 响应首部字段 AllowCt-EncodingCt-LanguageCt-LengthCt-Location
- Unreal Engine 4 —— 使用ProceduralMeshComponent实现模型实时切割
- mysql+影响的行数+获取_CI中获取读操作的结果集行数+获取写操作的影响行数
- 修改linux系统的open files参数
- 南阳理工ACM(题目56)
- python对工程造价有用吗_工程造价真的不行了吗?
- WPS2000中实现立体字效果(转)
- linux网络通讯架构实战篇【02、nginx整体结构、进程模型】
- Mac能连接手机热点却无法上网问题解决
- 我建议你自己写一个疫情数据监控
- TortoiseSVN简明教程
- Andriod 简介
- AlphaPose环境配置与测试
- vue图片加载不出来的问题
- 如何获取网易云音频地址
- JQuery替换元素
- Xshell实现windows上传文件到Linux系统
- cocos2d-2.1rc0-x-2.1.3运行libcurl返回CURLE_COULDNT_CONNECT(7)
热门文章
- win10的ios镜像
- JavaEE-面试-Solr面试回答思路
- RS纠删码性能分析实战
- 计算机学术论文3000字,计算机学术论文3000字_计算机学术毕业论文范文模板.doc...
- c51汇编语言循环指令,汇编语言循环指令loop
- UA PHYS515 电磁理论I 麦克斯韦方程组基础2 从实验定律到麦克斯韦方程
- scsi服务器硬盘如何用,实战:不重启服务器添加scsi硬盘
- 傅里叶变换落地:离散傅里叶变换(DFT)
- matlab与螺旋桨,基于Matlab的船用螺旋桨计算机实时仿真及GUI设计
- Overloud TH3 for Mac(电吉他效果器)